2017-02-20 71 views
0

對專有MIB的GET查詢的結果是:(無,無,無,[])。 這個結果是什麼意思?我無法理解我的自定義MIB的Snmp 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源)嗎?

回答

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值列表,以便遠程端無應答。

+0

對不起,這個問題(我在這方面是新的)。調試部分應該在哪裏進入腳本? –

+0

@ MosheS.You可以把它放在任何地方 - 自從執行'setLogger'函數的那一刻起,調試信息將被打印在stderr上。通常,在腳本的頂部。 –