在PySNMP中查询数字OID?

问题描述 投票:0回答:1

我正在尝试使用 Python 查询 Cisco 路由设备上的 SNMP 变量,但很困难。

我有一个运行良好的 snmpwalk 命令:

$snmpwalk -v2c -c <our_community_string> <device_ip_address> 1.3.6.1.4.1.9.9.42.1.2.10.1.1.950
SNMPv2-SMI::enterprises.9.9.42.1.2.10.1.1.950 = Gauge32: 68

现在我正在尝试使用 pysnmp 在 Python 中做同样的事情。

我尝试使用基于示例的内容,但收到了 SmiError:

In [1]: from pysnmp.entity.rfc3413.oneliner import cmdgen

In [2]: cmdGen = cmdgen.CommandGenerator()

In [3]: errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
...:     cmdgen.CommunityData('0pe3aro'),
...:     cmdgen.UdpTransportTarget(('10.65.113.28', 161)),
...:     cmdgen.MibVariable('1.3.6.1.4.1.9.9.42.1.2.10.1.1.950', 0)
...: )

但我得到以下信息:

SmiError: MIB file "1.3.6.1.4.1.9.9.42.1.2.10.1.1.950.py[co]" not found in search path

基本上 - 我想在 NetSNMP 中实现这一点,但在 PySNMP 中(http://ben.akrin.com/?p=1234)。

有人知道在 PySNMP 中查询数字 OID 的简单方法吗?

干杯, 维克多

python snmp
1个回答
4
投票

我相信以下代码适合您:

from pysnmp.entity.rfc3413.oneliner import cmdgen

cmdGen = cmdgen.CommandGenerator()

errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
    cmdgen.CommunityData('public'),
    cmdgen.UdpTransportTarget(('device_ip', 161)),
    '1.3.6.1.2.1.1.3.0'
)

print('\n'.join([ '%s = %s' % varBind for varBind in varBinds]))

您可以将其剪切并粘贴到 Python 提示符中来尝试和试验它。

MibVariable 对象可用于按名称引用 MIB 符号。

© www.soinside.com 2019 - 2024. All rights reserved.