对专有MIB的GET查询结果为:(None,None,None,[])。 这个结果是什么意思?
这是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, [])
我添加了Debug行并获得了以下结果:
>>> 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源)吗?
答案 0 :(得分:0)
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')))
)
您可以在examples或documentation中看到。
生成的元组解压缩到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值列表,以便远程端无需响应。