在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地址,但我想要的是真正的端口读数,我不知道该怎么做才能达到这个目标。我发现跟着文档走有点困难。
任何帮助都将不胜感激。
谢谢
1 个回答
3
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]
这个可能会对你有帮助。