我专门尝试使用PySNMP库从python中的SNMP端口读取数据.我有兴趣仅通过此库获取数据.这是因为我正在从NetSNMP迁移到PySNMP.
这是我为NetSNMP编写的工作代码,它实际上为我提供了来自端口的数据
import netsnmp as snmp
infoSet = snmp.Varbind('1.3.6.1.2.1.123.1.7.1.1.0')
infoGet = snmp.snmpget(infoSet, Version = 1, DestHost = 'localhost', Community = "public")
print infoGet
这三行代码向我返回了该端口的实际读数,我正尝试从PySNMP获取相同的数据,这是到目前为止的代码
from pysnmp.entity.rfc3413.oneliner import cmdgen
errorIndication, errorStatus, errorIndex, varBinds = cmdgen.CommandGenerator().getCmd(
cmdgen.CommunityData('my-agent', 'public', 0),
cmdgen.UdpTransportTarget(('localhost', 161)),
(1,3,6,1,2,1,1,1,0)
)
print varBinds[0][0]
这是在打印SNMP地址,我正在尝试通过此阶段,我可以在上面获得上述端口的实际读数,但我不确定该如何做.我发现很难按照文档进行操作.
任何帮助,将不胜感激.
谢谢
解决方法:
varBinds是一个元组列表.每个元组都包含一个OID值对.
>>> print varBinds
[(ObjectName(1.3.6.1.2.1.1.1.0), OctetString('Example Command Responder'))]
>>> print varBinds[0]
(ObjectName(1.3.6.1.2.1.1.1.0), OctetString('Example Command Responder'))
>>> print varBinds[0][0]
1.3.6.1.2.1.1.1.0
>>> print varBinds[0][1]
Example Command Responder
因此,如果您需要的只是价值,那么
>>> print varBinds[0][1]
可能有帮助.