你似乎正在使用
netsnmp
模块而不是
pysnmp
。
如果你想使用
pysnmp
,那么可以参考
这个示例。
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]))
更新:
以上循环将每次迭代获取一个OID值。如果您想更有效地获取数据,一种选择是将更多的OID填充到查询中(以许多ObjectType(...)
参数的形式)。
或者,您可以切换到GETBULK PDU类型,方法是将您的nextCmd
调用更改为bulkCmd
像这样。
from pysnmp.hlapi import *
for (errorIndication,
errorStatus,
errorIndex,
varBinds) in bulkCmd(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget(('demo.snmplabs.com', 161)),
ContextData(),
0, 25,
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]))
请记住,GETBULK命令支持最初是在SNMP v2c中引入的,因此您无法在SNMP v1上使用它。