2016-11-01 65 views
0

我正在嘗試利用PySNMP查詢HP Procurve交換機。到目前爲止,我已通過mibdump.py將hpicfChassis.mib轉換爲HP-ICF-CHASSIS.py,並確認此MIB處於正確的路徑中。我曾嘗試過使用和不使用MibBuilder代碼,但仍然遇到錯誤。HP Procurve上的PySNMP MIB查詢不起作用

我試圖在此MIB中查詢hpicfSlotDescr的SNMP值,以及其他SNMP值,它只是與以下錯誤消息炸彈:

pysnmp.smi.error.SmiError:實例指數(0)至對象'hpicfSlotDescr'上的OID轉換失敗:ConstraintsIntersection(ConstraintsIntersection(ConstraintsIntersection(),ValueRangeConstraint(-2147483648,21247483647)),ValueRangeConstraint(1,16))失敗:「ValueRangeConstraint(1,16)失敗:」0「在Integer32

我已經完成了數據包捕獲,並且當使用hpicfSlotDescr(最多可以返回6個值)時,SNMP查詢從不會向交換機生成請求。

當查詢不同的SNMP值(例如hpicfEntityIndex,期望1返回值)時,我看到請求已發出,但交換機從未回覆。在腳本和交換機上的社區名稱匹配,我只是迷失了,並想知道我想要完成的是否可行,如果是的話,我錯過了哪些主要組件?

在此先感謝!

from pysnmp.hlapi import * 
from pysnmp.smi import builder 

#MIBDIR = '/Python/Lib/site-packages/pysnmp_mibs' 
#mibBuilder = builder.MibBuilder() 
#mibSources = mibBuilder.getMibSources() + (builder.DirMibSource(MIBDIR),) 
#mibBuilder.setMibSources(*mibSources) 
#mibBuilder.loadModules('HP-ICF-CHASSIS') 


errorIndication, errorStatus, errorIndex, varBinds = next(
getCmd(SnmpEngine(), 
     CommunityData('<comm name>', mpModel=1), 
     UdpTransportTarget(('<ipv4 address>', 161)), 
     ContextData(), 
     ObjectType(ObjectIdentity('HP-ICF-CHASSIS', 'hpicfSlotDescr', 0))) 
) 

if errorIndication: 
print(errorIndication) 
elif errorStatus: 
print('%s at %s' % (errorStatus.prettyPrint(), 
        errorIndex and varBinds[int(errorIndex) - 1][0] or '?')) 
else: 
for varBind in varBinds: 
    print(' = '.join([x.prettyPrint() for x in varBind])) 

回答

0

我的猜測是,按照您的MIB定義,表(到HP-ICF-CHASSIS::hpicfSlotDescr列所屬)不允許零作爲其索引值。這是在傳達例外pysnmp:

ValueRangeConstraint(1, 16) failed at: "0" 

由於pysnmp不能建OID從MIB符號數據查詢,沒有數據包被髮送。所以我想嘗試適當的索引值在範圍1..16例如爲:

ObjectType(ObjectIdentity('HP-ICF-CHASSIS', 'hpicfSlotDescr', 1))) 

最後,你真的不需要手動MIB轉換步驟。只要您將MIB名稱傳遞給ObjectIdentity類,後者就會嘗試在本地文件系統以及this web site上找到此MIB的ASN.1源,並在後臺將其編譯爲Python。有關詳細信息,請參見pysnmp docs

+0

這是修復,非常感謝。 – RM092