cmdGen.nextCmd命令不同步

2024-09-28 21:35:09 发布

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

我试图检索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的表的一部分。 在varbind中应该是什么?在

^{pr2}$

或者

[   ['somewhere.1', 'Result1'],
    [None, None],
    ['somewhere.3', 'Result3'] ]

我拿到第一个。如果我有第二个就好了。重复垃圾数据的意义何在?在


Tags: 数据标记none应用程序权限代理内容情况
1条回答
网友
1楼 · 发布于 2024-09-28 21:35:09

当某个OID不可用时,代理将跳过该OID并继续处理它拥有的下一个OID。在

所以,如果您的代理有OID 1、2和3,当允许访问所有这些OID时,您请求GETNEXT 1和2,您将收到2和3作为响应。当对oid2的访问被拒绝时,您请求GETNEXT 1和2,您将收到3和3(因为2被代理跳过)。在

为了证明这一点,您可以启用pysnmp调试并查看管理器和代理之间实际交换了哪些oid。在

若要查找特定的OID并希望查看它是否可用,只需使用GET request,代理将以值或错误响应。在

相关问题 更多 >