2013-04-03 11 views
6

Sto tentando di eseguire una query su una variabile SNMP su un dispositivo di instradamento Cisco in Python e in difficoltà.Interrogare l'OID numerico in PySNMP?

Ho un comando snmpwalk che funziona bene:

$snmpwalk -v2c -c <our_community_string> <device_ip_address> 1.3.6.1.4.1.9.9.42.1.2.10.1.1.950 
SNMPv2-SMI::enterprises.9.9.42.1.2.10.1.1.950 = Gauge32: 68 

Ora sto cercando di fare la stessa cosa in Python utilizzando pysnmp.

Ho provato ad utilizzare qualcosa sulla base di esempi qui - http://pysnmp.sourceforge.net/examples/current/index.html - ma ho ottenuto uno SmiError:

In [1]: from pysnmp.entity.rfc3413.oneliner import cmdgen 

In [2]: cmdGen = cmdgen.CommandGenerator() 

In [3]: errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
...:  cmdgen.CommunityData('0pe3aro'), 
...:  cmdgen.UdpTransportTarget(('10.65.113.28', 161)), 
...:  cmdgen.MibVariable('1.3.6.1.4.1.9.9.42.1.2.10.1.1.950', 0) 
...:) 

Ma ottengo il seguente:

SmiError: MIB file "1.3.6.1.4.1.9.9.42.1.2.10.1.1.950.py[co]" not found in search path 

Fondamentalmente - Volevo che l'equavilent di questo NetSNMP, ma in PySNMP (http://ben.akrin.com/?p=1234).

Qualcuno conosce un modo semplice per interrogare un OID numerico in PySNMP?

Cheers, Victor

risposta

4

credo che il seguente codice dovrebbe funzionare per voi:

from pysnmp.entity.rfc3413.oneliner import cmdgen 

cmdGen = cmdgen.CommandGenerator() 

errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
    cmdgen.CommunityData('public'), 
    cmdgen.UdpTransportTarget(('demo.snmplabs.com', 161)), 
    '1.3.6.1.2.1.1.3.0' 
) 

print('\n'.join([ '%s = %s' % varBind for varBind in varBinds])) 

Si potrebbe tagliare & incollarlo nella propria Python pronta a provare e sperimentare con esso.

L'oggetto MibVariabile può essere utilizzato per fare riferimento a un simbolo MIB per nome.