2017-07-25 4 views
0

Ein Skript, das ich auf meinem Laptop entwickelt habe, läuft gut, aber auf einem Remote-Server gibt es nicht das zurück, was ich erwarten würde.PySNMP gibt verschiedene Werte auf verschiedenen Maschinen zurück

Mein Server hat diese Ausgabe:

Python 2.7.5 (default, Jun 17 2014, 18:11:42) 
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pysnmp 
>>> print pysnmp.__version__ 
4.2.5 
>>> 
>>> from pysnmp.entity.rfc3413.oneliner import cmdgen 
>>> cmdGen = cmdgen.CommandGenerator() 
>>> 
>>> errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.nextCmd(
...  cmdgen.CommunityData('communitystringhere'), 
...  cmdgen.UdpTransportTarget(('10.10.10.10', 161)), 
...  '1.3.6.1.2.1.2.2.1.2', 
...  lookupNames=True, lookupValues=True) 
>>>  
... for varBindTableRow in varBindTable: 
...  for val in varBindTableRow: 
...   print val 
... 
(MibVariable(ObjectName(1.3.6.1.2.1.2.2.1.2.1)), OctetString('fxp0')) 
(MibVariable(ObjectName(1.3.6.1.2.1.2.2.1.2.4)), OctetString('lsi')) 
(MibVariable(ObjectName(1.3.6.1.2.1.2.2.1.2.5)), OctetString('dsc')) 
(MibVariable(ObjectName(1.3.6.1.2.1.2.2.1.2.6)), OctetString('lo0')) 
[Output truncated...] 

Die Ergebnisse sind ein MibVariable und OctetString.

Auf meinem Laptop, erhalte ich folgendes:

Python 2.7.10 (default, Feb 7 2017, 00:08:15) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pysnmp 
>>> print pysnmp.__version__ 
4.3.2 
>>> 
>>> from pysnmp.entity.rfc3413.oneliner import cmdgen 
>>> [code ommitted, same as above...] 
... 
SNMPv2-SMI::mib-2.2.2.1.2.1 = fxp0 
SNMPv2-SMI::mib-2.2.2.1.2.4 = lsi 
SNMPv2-SMI::mib-2.2.2.1.2.5 = dsc 
SNMPv2-SMI::mib-2.2.2.1.2.6 = lo0 
[Output truncated...] 

Ich bin mir nicht sicher, was pysnmp Rückkehr machen könnte anders, anders als die kleinere Version - aber die ältere Version (auf dem Server) scheint habe viel bessere Leistung als die "neuere" Version auf meinem Laptop?

Fehle ich etwas offensichtlich?

Antwort

1

Sie haben Recht, die Standard str Darstellung des MibVariable Objekt (oder ObjectType in späteren Versionen pysnmp) geändert zwischen kleineren pysnmp Versionen ...

Sie .prettyPrint() auf der varBind anrufen können? Es würde hoffentlich eine einheitliche Darstellung in verschiedenen pysnmp Versionen erzeugen:

for varBindTableRow in varBindTable: 
    for varBind in varBindTableRow: 
    print(varBind.prettyPrint()) 

Als eine Angelegenheit von Hack, können Sie wahrscheinlich die alte str Darstellung wie diese nachahmen:

... 
>>> varBind = varBinds[0] 
>>> name, value = varBind 
>>> '%s(%s(%s), %s(%s))' % (
    type(varBind).__name__, 
    type(name).__name__, 
    name, 
    type(value).__name__, 
    value 
) 
'ObjectType(ObjectIdentity(1.3.6.1.2.1.1.1.0), DisplayString(Linux zeus 4.8.6.5-smp #2 SMP Sun Nov 13 14:58:11 CDT 2016 i686))' 
+0

Danke für die Hilfe, landete ich Verwenden Sie eine ähnliche Methode, um Ihre zu imitieren. –

+0

Obwohl ich nicht sicher bin, was ist dein ultimatives Ziel hier? Müssen Sie die genauen zurückgegebenen SNMP-Typen kennen? –

+0

Nein, ich versuche im Wesentlichen nur diese OID zu durchlaufen, um alle Werte zurück zu bekommen. Ich habe einen Suchstring, den ich in dieser Tabelle finden möchte, wobei der letzte Teil der OID der Index der Sache ist, nach der ich suche. –

Verwandte Themen