2015-05-18 59 views
0

的Python 3.4 - PYSNMP的最新版本(PIP --update)的Python 3.4 PYSNMP集問題

有問題設置使用PYSNMP庫ifAlias值。希望有人能夠闡明爲什麼我在第二個函數中出現錯誤。

證實,此OID是可置使用標準的MIB瀏覽器(iReasoning)

這一個工作就好了。你只需要在函數中放入一個字符串new sys contact value,這很好。

def SNMP_SET_SYSCONTACT(syscontact): 
      errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(
cmdgen.CommunityData('private'), 
cmdgen.UdpTransportTarget(('10.101.0.221', 161)),(cmdgen.MibVariable('.1.3.6.1.2.1.1.4.0'), syscontact), 
lookupNames=False, 
lookupValues=True) 

這一個根本不起作用。

def SNMP_SET_IFALIAS(ifAlias): 
       errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(
cmdgen.CommunityData('private'), 
cmdgen.UdpTransportTarget(('10.101.0.221', 161)),(cmdgen.MibVariable('1.3.6.1.2.1.31.1.1.1.18.1'), ifAlias), 
lookupValues=False, 
lookupNames=False) 

錯誤我收到的回覆是:

Traceback (most recent call last): 
    File "<pyshell#632>", line 1, in <module> 
    SNMP_SET_IFALIAS('Check this out') 
    File "<pyshell#629>", line 2, in SNMP_SET_IFALIAS 
    errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(cmdgen.CommunityData('private'),cmdgen.UdpTransportTarget(('10.101.0.221', 161)),(cmdgen.MibVariable('1.3.6.1.2.1.31.1.1.1.18.1'), ifAlias),lookupValues=False, lookupNames=False) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 452, in setCmd 
    kwargs.get('contextName', null) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 314, in setCmd 
    self.makeVarBinds(varBinds), 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 212, in makeVarBinds 
    varVal = varName.getMibNode().getSyntax().clone(varVal) 
AttributeError: 'MibIdentifier' object has no attribute ‘getSyntax' 

我很高興在需要時提供額外的信息。


兩個更簡單的問題

1)我想抓最新pysnmp 4.2.6.2,但我越來越阻塞,出現以下錯誤安裝

找不到滿足要求pyasn1> = 0.1.8
(來自pysnmp)的版本(來自版本:0.0.9a0,0.0.10a0,0.0.11a0,0.0.12a0,
0.0.13a0,0.0.13b0,0.0。 13,0.1.1 ,0.1.2,0.1.3,0.1.4,0.1.5,0.1.6,0.1.7)無匹配的分佈發現pyasn1> = 0.1.8(從pysnmp)

2)我誤解了lookupValues = False & lookupNames =虛假kwargs以上?我認爲應該允許我直接訪問OID而不必導入MIB。如果可能,我想避免任何依賴關係。

回答

1

這看起來像是一個在pysnmp中的錯誤 - 最新的CVS版本可能不會那樣拋出。

但是,該錯誤的根本原因是,pysnmp無法找到對應於1.3.6.1.2.1.31.1.1.1.18.1 OID的MIB對象。這可能發生是因爲定義OID的MIB沒有加載或者有問題的OID不對應於任何MIB對象。

要加載IF-MIB,你既可以做到這一點明確:

cmdgen.MibVariable('1.3.6.1.2.1.31.1.1.1.18.1').loadMibs('IF-MIB') 

或使用MIB :: object.index語法:

cmdgen.MibVariable('IF-MIB', 'ifAlias', 1) 

你可以抓住從IF-MIB.py pysnmp-mibs軟件包可以在pypi上使用,或者通過[實驗] pysmi編譯器(http://sf.net/projects/pysmi/

+0

感謝指針!兩個更快的問題 – netmanchris