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
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 –
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. –
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