使用wireshark我可以看到当我运行这个程序(How to get the value of OID in Python using PySnmp)时,请求ID会继续,我可以使用python程序获得请求ID编号,当我运行此程序时我基本上给了社区: public和version v2c,但在get-response中我获得了request-id,这就是获取所需的内容。请帮我解决一下这个问题。这是wireshark中snmp响应的图像。
答案 0 :(得分:3)
嗯,request-id
是SNMP机制非常私密的东西。但如果你愿意,你仍然可以得到它。
使用pysnmp,您可以使用内置挂钩让它回调您的函数并向其传递属于处理请求的SNMP引擎的内部数据。
...
# put this in your script's initialization section
context = {}
def request_observer(snmpEngine, execpoint, variables, context):
pdu = variables['pdu']
request_id = pdu['request-id']
# this is just a way to pass fetched data from the callback out
context['request-id'] = request_id
snmpEngine.observer.registerObserver(
request_observer,
'rfc3412.receiveMessage:request',
cbCtx=context
)
...
现在,一旦您以正常方式收到SNMP消息,其request-id
的{{1}}应存储在PDU
中。您可以通过这种方式获得有关底层SNMP数据结构的所有内容。