我正在尝试检索snmp表中的某些列。根据代理的权限,有时不返回列。发生这种情况时,下一个有效响应的OID在varBindTable中重复。
是否有任何标记或平面显示该行不包含我要求的内容? 我的应用程序希望结果与输入相同。
程序员应该注意到数据出了什么问题。
让我们从一个例子开始: 这是高级同步版本。我抓住一张表,其中行数及其索引事先未知。
from pysnmp.entity.rfc3413.oneliner import cmdgen
cmdGen = cmdgen.CommandGenerator()
errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.nextCmd(
cmdgen.CommunityData('public', mpModel=0),
cmdgen.UdpTransportTarget(('demo.snmplabs.com', 161)),
'somewhere.1',
'somewhere.2,
'somewhere.3,
)
让我们假设1和3存在而2则不存在。 还假设这些是索引行为10和20的表的一部分。 什么应该在varBindTable中?
[ ['somewhere.1', 'Result1'],
['somewhere.3', 'Result3'],
['somewhere.3', 'Result3'] ]
或
[ ['somewhere.1', 'Result1'],
[None, None],
['somewhere.3', 'Result3'] ]
我得到了第一个。如果我拿到第二个就好了。什么是重复垃圾数据?
答案 0 :(得分:0)
当OID不可用时,代理会跳过它并继续执行下一个OID。
因此,如果您的代理人在允许访问所有这些OID时有OID 1,2和3,则请求GETNEXT 1和2,您将收到2和3作为响应。当拒绝访问OID 2时,您请求GETNEXT 1和2,您将收到3和3(代理人跳过2)。
为了证明这一点,你可以启用pysnmp调试,看看你的经理和代理之间实际交换了哪些OID。
如果您正在寻找特定的OID并希望查看它是否可用,只需使用GET请求,Agent就会以值或错误响应。