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

问题描述 投票:0回答:1

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

python snmp pysnmp
1个回答
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')))

如您在文档中所见。

生成的元组解包为

errorIndication
errorStatus
errorIndex
varBinds
组件:

  • 非 false
    errorIndication
    表明来自本地或远程 SNMP 引擎的硬错误
  • 非 false
    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 值列表,以便远程端不会做出任何响应。

© www.soinside.com 2019 - 2024. All rights reserved.