2013-11-24 174 views
0

我對pysnmp和snmp都很陌生,我試圖獲得一個簡單的腳本來從我的網絡上的兩個路由器(一個Airport Extreme和Tomato Firmware路由器)轉儲統計信息。如何獲得pysnmp使用pysnmp-mib進行友好輸出?

此代碼是(從網上的例子)的作品,但沒有友好名稱:

from pysnmp.entity.rfc3413.oneliner import cmdgen 

cmdGen = cmdgen.CommandGenerator() 

errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.nextCmd(
    cmdgen.CommunityData('public'), 
    cmdgen.UdpTransportTarget(('router', 161)), 
    cmdgen.MibVariable('IF-MIB', '').loadMibs(), 
    lexicographicMode=True, maxRows=100, 
    ignoreNonIncreasingOid=True 
) 

if errorIndication: 
    print(errorIndication) 
else: 
    if errorStatus: 
     print('%s at %s' % (
      errorStatus.prettyPrint(), 
      errorIndex and varBindTable[-1][int(errorIndex)-1] or '?' 
      ) 
     ) 
    else: 
     for varBindTableRow in varBindTable: 
      for name, val in varBindTableRow: 
       print('%s = %s' % (name.prettyPrint(), val.prettyPrint())) 

產生這樣的輸出:

python foo.py 

1.3.6.1.2.1.2.1.0 = 8 
1.3.6.1.2.1.2.2.1.1.1 = 1 
1.3.6.1.2.1.2.2.1.1.2 = 2 
.... 

我希望能產生像snmpwalk的輸出:

snmpwalk router -c public -v2c 

SNMPv2-MIB::sysDescr.0 = STRING: Linux router 2.6.22.19 #20 Tue Apr 2 13:54:22 ICT 2013 mips 
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10 
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (55888889) 6 days, 11:14:48.89 
.... 

我相信這只是使MIB正確可用的問題。我安裝了pysnmp-mibs,但我還沒有想出如何使用它。

回答

1

只是通過

..., lookupNames=True, lookupValues=True 

您nextCmd()調用像this

對於您可能需要編譯你的MIB到pysnmp格式,並與.addMibSource指向您的pysnmp腳本,它()方法的對象不在pysnmp的MIB:

..., cmdgen.MibVariable('TCP-MIB', 'tcpConnTable').addMibSource('/tmp/mymibs'), 

的解釋here