2017-06-12 2 views
0

Ich möchte Snmp-Daten mit Python Pysnmp-Modul erhalten. Ich benutzte Befehlszeile, um SNMP Daten zu erhalten, aber jetzt möchte ich es mit pysnmp Modul lesen.Wie bekomme ich SNMP-Daten mit pysnmp?

SNMP-Befehl -

snmpwalk -v 1 -c public <ip address>:<port> xyz::pqr 

Ich wurde wie oben Befehl. Jetzt habe ich versucht, so etwas wie unten -

import netsnmp 

def getmac(): 
    oid = netsnmp.VarList(netsnmp.Varbind('.1.3.6.1.2.1.17.7.1.2.2.1.2')) 
    res = netsnmp.snmpgetbulk(oid, Version = 1, DestHost='ip', 
          Community='pub') 
    return res 

print getmac() 

ich Fehler bin vor - Import NetSNMP. Kein Modul netsnmp

Jeder kann mir einen Vorschlag geben, wie ich snmp Daten vom SNMP-Server mit Python bekommen kann?

Antwort

1

Sie scheinen das Modul netsnmp im Gegensatz zu pysnmp zu verwenden.

from pysnmp.hlapi import * 

for (errorIndication, 
    errorStatus, 
    errorIndex, 
    varBinds) in nextCmd(SnmpEngine(), 
          CommunityData('public', mpModel=0), 
          UdpTransportTarget(('demo.snmplabs.com', 161)), 
          ContextData(), 
          ObjectType(ObjectIdentity('1.3.6.1.2.1.17.7.1.2.2.1.2'))): 
    if errorIndication or errorStatus: 
     print(errorIndication or errorStatus) 
     break 
    else: 
     for varBind in varBinds: 
      print(' = '.join([x.prettyPrint() for x in varBind])) 

UPDATE:

Die obige Schleife pro Iteration OID-Wert holen ein

Wenn Sie pysnmp verwenden möchten, dann können this example helfen. Wenn Sie Daten effizienter abrufen möchten, besteht eine Möglichkeit darin, mehr OIDs in die Abfrage einzufügen (in Form vieler Parameter ObjectType(...)).

Oder Sie können auf den GETBULK PDU-Typ wechseln, indem Sie Ihren nextCmd Anruf in bulkCmdlike this ändern.

from pysnmp.hlapi import * 

for (errorIndication, 
    errorStatus, 
    errorIndex, 
    varBinds) in bulkCmd(SnmpEngine(), 
     CommunityData('public'), 
     UdpTransportTarget(('demo.snmplabs.com', 161)), 
     ContextData(), 
     0, 25, # fetch up to 25 OIDs one-shot 
     ObjectType(ObjectIdentity('1.3.6.1.2.1.17.7.1.2.2.1.2'))): 
    if errorIndication or errorStatus: 
     print(errorIndication or errorStatus) 
     break 
    else: 
     for varBind in varBinds: 
      print(' = '.join([x.prettyPrint() for x in varBind])) 

Beachten Sie, dass GETBULK Führungsunterstützung zunächst in SNMP v2c eingeführt wurde, dh Sie es nicht über SNMP v1 verwenden können.

+0

Vielen Dank für Ihre Antwort. Ich habe Ihr Snippet ausprobiert, aber alle Daten wurden nicht abgerufen. Irgendeine Idee, warum so? – kit

+0

@IIya Etingof- Wie können wir mehr als einen sagen 10 OID-Daten zu einem Zeitpunkt? – kit

+0

@kit Meine Antwort wurde aktualisiert, lassen Sie mich wissen, wenn dies das ist, was Sie brauchen –