pysnmp nextcmd在超时时停止

时间:2015-05-11 12:24:57

标签: python snmp pysnmp

我正试图在某些网络设备上进行snmp行走 在一些网络设备上,我成功地通过所有设备oids和一些网络设备,我没有成功通过所有设备oids。 这是我的代码:

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会在certaion oid上获得超时并且存在于该线程之外。

enter image description here

正如您所看到的,线程到达某个oid,出现超时错误,然后退出该线程 所以我想知道如果达到一个超时的oid,如何继续snmpwalk 基本上,如果asyncCommandGenerator到达一个超时的oid,它应该继续walk并获得其余的oids。
我怎么能实现这个目标?

1 个答案:

答案 0 :(得分:1)

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

  1. 只要获得响应,就会对同一个OID重复GETNEXT请求。通过增加请求超时和重试计数。适当的SNMP响应者应该最终响应所有有效请求。
  2. 试着猜猜" next" OID超过你无法得到回应的那个。这通常取决于MIB,并且在许多情况下可能需要非平凡的模糊性。一旦你以某种方式选择了下一个OID,只需用猜测的OID重新启动你的原始代码。这将有效地"跳过"问题OID(如果您的猜测不完美,可以立即使用其中的许多OID)。如果发生另一次超时,您可以考虑更改下一个OID选择逻辑 - 您可能仍然在同一时间输出OID。