PySNMP产生不正确的结果:同时NULL varBind值和超时

时间:2019-04-04 12:57:14

标签: python pysnmp

我正在使用PySNMP通过以下基本代码(为保密起见,取出特定值)在设备上遍历一组OID:

|-- a: string (nullable = true)
|-- b: array (nullable = true)
|     |-- element: struct (containsNull = true)
|     |     |-- cNested: long (nullable = true)
|     |     |-- aNested: long (nullable = true)
|     |     |-- bNested: string (nullable = true)
|-- cDate: string(nullable = true)

让我陷入困境的是,这确实适用于许多设备-但是在某些设备上,我得到以下结果:

import base64
from pysnmp.hlapi import *

for (errorIndication,
     errorStatus,
     errorIndex,
     varBinds) in nextCmd(SnmpEngine(),
                     CommunityData(community, mpModel=1),
                     UdpTransportTarget((device_name, 161)),
                     ContextData(),
                     ObjectType(ObjectIdentity(walking_oid)),
                     lexicographicMode=False,
                     ignoreIncreasingOids=True):
    print(str(errorIndication))
    for varBind in varBinds:
        print(str(varBind))

这表示同时存在错误(SNMP超时)和varBinds值。我不确定空的varBind值的含义,也不确定为什么即使出现错误,为什么仍然会打印varBind(尽管是空的)。另外,当手动查询该设备以获取相同信息时,将获得实际值。假设所有输入信息(名称,社区,型号,端口等)均正确,是否还有其他可能导致此问题的原因?

1 个答案:

答案 0 :(得分:0)

一旦errorIndication的计算结果为True,其余的收益应被忽略。如果没有响应,为什么要使用varBinds

由于返回errorIndication(即作为元组)的方式,也有必要为varBinds返回一些内容。

在SNMP中,请求中变量绑定的数量和顺序经常与响应中的匹配(可能是因为在许多情况下,error-index参数用于指向麻烦的var-binds)。即使在超时的情况下,也只是为了保持一致性而将请求变量绑定放入响应中。这就是为什么它们不携带任何响应值,而只是OID的原因。

如果设备运行缓慢,是否可能会增加pysnmp中的响应超时?否则,启用pysnmp调试可能会揭示幕后情况。