pysnmp nextcmd在您的时间停止

2024-05-16 23:14:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在某些网络设备上执行snmp漫游。
在某些联网设备上,我成功地浏览了所有设备OID,而在某些网络设备上,我没有成功地浏览所有设备OID。
这是我的代码:

cmdGen = cmdgen.AsynCommandGenerator()
cmdGen.asyncNextCmd(
    cmdgen.CommunityData('public', mpModel=0),
    cmdgen.UdpTransportTarget(('ip', 161),timeout=timeout,retries=retries),
    ((1,3),),
    (cbFun_Walk, None))
cmdGen.snmpEngine.transportDispatcher.runDispatcher() 

问题是,有时asyncCommandGenerator在某个oid上获得超时,并且存在于线程之外。在

enter image description here

如您所见,线程到达某个oid,出现超时错误,然后退出线程。
因此,我想知道即使到达超时oid,如何继续snmpwalk。
基本上,如果asyncCommandGenerator到达超时的oid,它应该继续遍历并获取其余的oid。
我怎么能做到这一点?在


Tags: 代码timeoutpublic线程snmp网络设备oidretries
1条回答
网友
1楼 · 发布于 2024-05-16 23:14:39

从逻辑上讲,您不能在请求超时时跳过“next”OID,因为那时您将不知道下一个OID是什么。我可以在这里看到两个解决方案:

  1. 对同一OID重复GETNEXT请求,直到得到响应为止。通过增加请求超时和重试次数。正确的SNMP响应程序应该最终响应所有有效的请求。在
  2. 试着猜猜什么是“下一个”过去的一个你不能得到回应。这通常依赖于MIB,在许多情况下可能需要一个非平凡的模糊性。一旦您以某种方式选择了下一个OID,只需使用猜测的OID重新启动原始代码。这将有效地“跳过”问题OID(或者如果您的猜测不完美,可以同时跳过许多问题)。在另一个超时的情况下,您可以考虑更改下一个OID选择逻辑—如果您仍然碰到相同的超时OID。在

相关问题 更多 >