对专有 MIB 进行 GET 查询的结果是:(无、无、无、[])。 这个结果有什么意义?
这是Python脚本:
>>>g= getCmd(SnmpEngine(),
... CommunityData('admin'),
... UdpTransportTarget(('10.0.1.134', 161)),
... '1.3.6.1.4.1.4515.1.8.1.1.1.8.1295360.1295360'
)
>>>next(g)
(None, None, None, [])
我添加了调试行并得到以下结果:
>>> from pysnmp.hlapi import *
>>> from pysnmp.debug import setLogger, Debug
>>>
>>> setLogger(Debug('msgproc', 'secmod'))
2017-02-21 10:27:44,322 pysnmp: running pysnmp version 4.3.2
2017-02-21 10:27:44,322 pysnmp: debug category 'msgproc' enabled
2017-02-21 10:27:44,322 pysnmp: debug category 'secmod' enabled
>>>
>>>
>>> g= getCmd(SnmpEngine(),
... CommunityData('admin'),
... UdpTransportTarget(('10.0.1.134', 161)),
... '1.3.6.1.4.1.4515.1.8.1.1.1.8.1295360.1295360'
... )
>>> next(g)
(None, None, None, [])
我什至尝试添加缺少的 ContextData() 并得到以下结果:
>>> from pysnmp.hlapi import *
>>> from pysnmp.debug import setLogger, Debug
>>> setLogger(Debug('msgproc', 'secmod'))
2017-02-21 10:29:41,640 pysnmp: running pysnmp version 4.3.2
2017-02-21 10:29:41,640 pysnmp: running pysnmp version 4.3.2
2017-02-21 10:29:41,640 pysnmp: debug category 'msgproc' enabled
2017-02-21 10:29:41,640 pysnmp: debug category 'msgproc' enabled
2017-02-21 10:29:41,640 pysnmp: debug category 'secmod' enabled
2017-02-21 10:29:41,640 pysnmp: debug category 'secmod' enabled
>>> g= getCmd(SnmpEngine(),
... CommunityData('admin'),
... UdpTransportTarget(('10.0.1.134', 161)),
... ContextData(),
... '1.3.6.1.4.1.4515.1.8.1.1.1.8.1295360.1295360'
... )
>>> next(g)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python35\lib\site-packages\pysnmp-4.3.2-py3.5.egg\pysnmp\hlapi\asyncore\sync\cmdgen.py", line 107, in getCmd
File "C:\Program Files\Python35\lib\site-packages\pysnmp-4.3.2-py3.5.egg\pysnmp\hlapi\asyncore\cmdgen.py", line 127, in getCmd
File "C:\Program Files\Python35\lib\site-packages\pysnmp-4.3.2-py3.5.egg\pysnmp\hlapi\varbinds.py", line 36, in makeVarBinds
File "C:\Program Files\Python35\lib\site-packages\pysnmp-4.3.2-py3.5.egg\pysnmp\smi\rfc1902.py", line 845, in resolveWithMib
pysnmp.smi.error.SmiError: MIB object ObjectIdentity('1') is not OBJECT-TYPE (MIB not loaded?)
>>>
你能看出我做错了什么吗? 难道我使用其他 MIB 文件来将我的专有 MIB 转换为 .py 格式这一事实已经以某种方式改变了我的 MIB 吗? 你不认为我应该更好地对整个 MIB 树进行 mibdump.py 转换(不使用 http 源)吗?
TL;RD;您缺少
contextData
参数:
errorIndication, errorStatus, errorIndex, varBinds = next(
getCmd(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget(('demo.snmplabs.com', 161)),
ContextData(),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.1.0')),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.6.0')))
)
如您在文档中所见。
生成的元组解包为
errorIndication
、errorStatus
、errorIndex
、varBinds
组件:
errorIndication
表明来自本地或远程 SNMP 引擎的硬错误errorStatus
表示来自远程 SNMP 引擎的预定义 SNMP 错误代码之一varBinds
是远程 SNMP 引擎响应您的请求而发送的一系列 OID 值对(None, None, None, [])
返回看起来远程SNMP引擎没有将任何OID值对放入响应PDU中。为了弄清楚这一点,我要打开 pysnmp 调试:
from pysnmp.debug import setLogger, Debug
setLogger(Debug('msgproc', 'secmod'))
查看您发出的信息以及远程端的响应信息。
我的猜测是,由于您放错了 OID 参数,因此您实际上是在发送空的 OID 值列表,以便远程端不会做出任何响应。