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

Python 我能';我无法理解自定义MIB的Snmp GET查询结果,python,snmp,pysnmp,Python,Snmp,Pysnmp,对专有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' ) >>>

对专有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, [])
>>> 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?)
  >>>
我甚至尝试添加缺失的ContextData(),结果如下:

>>> 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, [])
>>> 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?)
  >>>
来自pysnmp.hlapi导入的
>>*
>>>从pysnmp.debug导入setLogger,调试
>>>设置记录器(调试('msgproc','secmod'))
2017-02-21 10:29:41640 pysnmp:运行pysnmp版本4.3.2
2017-02-21 10:29:41640 pysnmp:运行pysnmp版本4.3.2
2017-02-21 10:29:41640 pysnmp:已启用调试类别“msgproc”
2017-02-21 10:29:41640 pysnmp:已启用调试类别“msgproc”
2017-02-21 10:29:41640 pysnmp:已启用调试类别“secmod”
2017-02-21 10:29:41640 pysnmp:已启用调试类别“secmod”
>>>g=getCmd(SnmpEngine(),
…CommunityData(“管理员”),
…UDPTTransportTarget(('10.0.1.134',161)),
…ContextData(),
...              '1.3.6.1.4.1.4515.1.8.1.1.1.8.1295360.1295360'
... )
>>>下一个(g)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Program Files\Python35\lib\site packages\pysnmp-4.3.2-py3.5.egg\pysnmp\hlapi\asyncore\sync\cmdgen.py”,第107行,在getCmd中
文件“C:\Program Files\Python35\lib\site packages\pysnmp-4.3.2-py3.5.egg\pysnmp\hlapi\asyncore\cmdgen.py”,第127行,在getCmd中
文件“C:\Program Files\Python35\lib\site packages\pysnmp-4.3.2-py3.5.egg\pysnmp\hlapi\varbinds.py”,第36行,在makeVarBinds中
resolveWithMib中的文件“C:\Program Files\Python35\lib\site packages\pysnmp-4.3.2-py3.5.egg\pysnmp\smi\rfc1902.py”,第845行
pysnmp.smi.error.SmiError:MIB对象ObjectIdentity('1')不是对象类型(MIB未加载?)
>>>
你能看出我做错了什么吗? 我使用其他MIB文件将我的专有MIB转换为.py格式,这是否会以某种方式改变我的MIB?
你不认为我应该在整个MIB树上进行mibdump.py转换(不使用http源)更好吗;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
    错误指示
    显示来自本地或远程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值列表,这样远程端就不会做出任何响应。

很抱歉这个问题(我在这方面是新手)。调试部分应该放在脚本的什么地方?@MosheS。您可以把它放在任何地方——调试消息将从执行
setLogger
函数的那一刻起打印在stderr上。通常,在脚本的顶部。