我无法理解我的自定义MIB的Snmp GET查询的结果

时间:2017-02-20 13:13:28

标签: python snmp pysnmp

对专有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源)吗?

1 个答案:

答案 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')))

您可以在examplesdocumentation中看到

生成的元组解压缩到errorIndicationerrorStatuserrorIndexvarBinds个组件:

  • 非错误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值列表,以便远程端无需响应。