You seem to be using the netsnmp
module as opposed to the pysnmp
.
If you want to use pysnmp
, then this example may help:
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:
The above loop will fetch one OID-value per iteration. If you want to fetch data more efficiently, one option is to stuff more OIDs into the query (in form of many ObjectType(...)
parameters).
Or you can switch onto the GETBULK PDU type which can be done by changing your nextCmd
call into bulkCmd
like this.
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]))
Keep in mind that GETBULK command support was first introduced in SNMP v2c, that is you can't use it over SNMP v1.