在Python中从SNMP端口获取数据

3 投票
1 回答
3919 浏览
提问于 2025-04-17 10:56

我正在尝试使用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]

这个可能会对你有帮助。

撰写回答