2017-07-25 2 views
0

Un script que j'ai développé sur mon ordinateur portable fonctionne bien, mais sur un serveur distant, il ne renvoie pas ce que je m'attendais.PySNMP renvoyant différentes valeurs sur différentes machines

Mon serveur a cette sortie:

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

Les résultats sont VariableMIB et OctetString.

Sur mon portable, je reçois le texte suivant:

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

Je ne sais pas ce qui pourrait être fait différemment retour pysnmp, autre que la version mineure - mais la version plus ancienne (sur le serveur) semble avoir une sortie beaucoup plus agréable que la version «plus récente» sur mon ordinateur portable?

Est-ce que quelque chose me manque?

Répondre

1

Vous avez raison, la valeur par défaut str représentation du MibVariable objet (ou ObjectType dans les versions ultérieures pysnmp) a changé entre les versions mineures pysnmp ...

Pouvez-vous appeler .prettyPrint() sur le varBind? Il nous espérons produire une représentation uniforme à travers différentes versions pysnmp:

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

En hack, vous pouvez probablement imiter l'ancienne représentation str comme ceci:

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

Merci pour l'aide, j'ai fini en utilisant une méthode similaire à la vôtre pour imiter. –

+0

Bien que je ne sois pas certain quel est votre but ultime ici? Avez-vous besoin de connaître les types SNMP exacts retournés? –

+0

Non, je suis simplement en train d'essayer de marcher cet OID pour récupérer toutes les valeurs. J'ai une chaîne de recherche que j'essaie de trouver dans ce tableau, la dernière partie de l'OID étant l'index de la chose que je cherche. –