2012-04-05 6 views
2

Wenn ich snmpwalk auf einem OID (1.3.6.1.4.1.2021.4) verwenden, bekomme ich folgende Ergebnisse als:Wie finde ich die Mib-Tabelle in pysnmp?

UCD-SNMP-MIB::memIndex.0 = INTEGER: 0 

UCD-SNMP-MIB::memErrorName.0 = STRING: swap 

UCD-SNMP-MIB::memMinimumSwap.0 = INTEGER: 16000 kB 

Aber, wenn ich das pysnmp Modul verwenden die gleiche OID abfragen, ich die bekommen Ergebnisse als: ich verwende

(ObjectName(1.3.6.1.4.1.2021.4.1.0), Integer(0)) 

(ObjectName(1.3.6.1.4.1.2021.4.2.0), OctetString('swap')) 

(ObjectName(1.3.6.1.4.1.2021.4.12.0), Integer(16000)) 

ich die pysnmp_mibs in os.environ und der Code gestellt haben, ist:

from pysnmp.entity.rfc3413.oneliner import cmdgen 
from pysnmp.smi import builder, view, error 

errorIndication, errorStatus, errorIndex, \ 
      varBindTable = cmdGen.nextCmd (
cmdgen.CommunityData('test-agent', 'public'), 
cmdgen.UdpTransportTarget ((localhost, 161)), 
('1.3.6.1.4.1.2021.4') 
) 

if errorIndication: 
    log.warn(errorIndication) 
    return 
else: 
    if errorStatus: 
     log.warn('%s at %s\n' % (
      errorStatus.prettyPrint(), 
      errorIndex and varBindTable[-1][int (errorIndex) - 1] or '?' 
      )) 
     return 
    else: 
     for varBindTableRow in varBindTable: 
      for oid, val in varBindTableRow: 
        (symName, modName), indices = cmdgen.mibvar.oidToMibName(
         cmdGen.mibViewController, oid 
         ) 
        val = cmdgen.mibvar.cloneFromMibValue(
            cmdGen.mibViewController, modName, symName, val 
         ) 
      print varBindTableRow 

Meine Frage ist, warum snmpwalk und pysnmp Ergebnisse unterschiedlich ist, und welche shoul D ich tun, um die Ergebnisse gleiche wie Snmpwalk mit Pysnmp-Modul zu bekommen?


Edited:

ich den Code versucht, aber 1.3.6.1.2.1.4.22.1 ich folgende Fehlermeldung auf Abfrage

NoSuchObjectError: NoSuchObjectError({'str': 'No MIB info for (1, 3, 6, 1, 4, 1, 2021, 4, 1, 0) (closest parent (1, 3, 6, 1, 4, 1))'}) 

Ich habe geladen werden das IP-MIB-Modul als:

mibBuilder = builder.MibBuilder() 
mibPath = mibBuilder.getMibSources()+(builder.DirMibSource(path_to_mib_dir),) 
mibBuilder.setMibSources(*mibPath) 
mibBuilder.loadModules('IP-MIB') 
mibView = view.MibViewController(mibBuilder) 

Was ich bin verwirrt ist, wie verwende ich diese mibView in

(symName,modName),indices=cmdgen.mibvar.oidToMibName(cmdGen.mibViewController, oid) 
val=cmdgen.mibvar.cloneFromMibValue(cmdGen.mibViewController,modName, symName, val) 

sollte die cmdGen.mibViewController mit dem mibView ersetzt werden?

aber es funktioniert auf OID 1.3.6.1.2.1.1.3: und ich bekomme das Ergebnis wie erwartet als:

SNMPv2-MIB::sysUpTime.0 = 27 
+1

Sie scheinen IP-MIB in * eine andere * Instanz der MIB-Struktur zu laden, nicht die gleiche, die Sie für die OID-Auflösung verwenden. Ihr IP-MIB-Ladecode funktioniert möglicherweise, wenn Sie mibBuilder = cmdGen.mibViewController.mibBuilder verwenden –

+0

Sie beziehen sich auch auf 1.3.6.1.4.1.2021.4.1.0, das in UCD-SNMP-MIB definiert ist. Da pysnmp-mibs diese MIB [noch] nicht enthält, müsste man sie mit dem Skript pysnmp/tools/build-pysnmp-mib in das Python-Modul kompilieren. Sobald es geladen ist, funktioniert Ihre OID-Auflösung möglicherweise. –

+0

Danke. mibBuilder = cmdGen.mibViewController.mibBuilder hat funktioniert. Aber ich bekomme eine: './build-pysnmp-mib ~/Desktop/src/UCD-SNMP-MIB.mib Leerer Eingang smidump -k -f python /Users/furion/Desktop/src/UCD-SNMP-MIB.mib | ./libsmi2pysnmp schlägt fehl stellen Sie sicher, dass Sie libsmi Version> 0.4.5 (oder svn) ' Fehler beim Versuch, die UCD-SNMP-MIB mit pysnmp/tools/build-pysnmp-mib-Skript zu kompilieren. – ashokadhikari

Antwort

0

Versuchen Druck:

print '%s::%s.%s = %s' % (
        modName, symName, 
        '.'.join(map(lambda v: v.prettyPrint(), indices), 
        val.prettyPrint() 
        ) 

statt

print varBindTableRow 

Auch stellen Sie sicher, dass Sie entsprechende MIB laden.

+0

Ich habe den oben genannten Code auch versucht, aber ich bekomme Fehler. Bitte schauen Sie auf meine Frage, ich habe es bearbeitet, die die Details enthält. – ashokadhikari

0

Sorry, aber die Ergebnisse sind die gleichen!

Wenn Ihr Problem etwa 16000 gegenüber 16000 KB ist, müssen Sie wissen, dass SNMP das Gerät nicht zurückgibt. SNMP V2 MIB erlauben nur einen Ort, um Informationen darüber zu geben, so dass SNMPWALK (als ein Client) es verwendet, nicht pysnmp.

+1

Mit den gleichen Ergebnissen meine ich, wie ich meine pysnmp Display-Ergebnis als UCD-SNMP-MIB :: memIndex.0 = INTEGER: 0, anstelle von, (ObjectName (1.3.6.1.4.1.2021.4.1.0), Ganzzahl (0)) Ja, sie sind die gleichen Ergebnisse, aber die vorherige ist lesbarer, ich möchte nur die Ausgabe lesbar machen. – ashokadhikari