cmdGen.nextCmd不同步

时间:2014-02-07 21:49:34

标签: python pysnmp

我正在尝试检索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'] ]

我得到了第一个。如果我拿到第二个就好了。什么是重复垃圾数据?

1 个答案:

答案 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就会以值或错误响应。