在Python中从SNMP端口获取数据

我专门尝试使用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]

可能有帮助.

上一篇:java – SNMP4J入门


下一篇:zabbix4.2配置监控华为路由器:基于ENSP模拟器