我已经安装了PySNMP(版本4.4.6),并尝试调用以下函数(属于较大类的一部分):
def walk(self):
#Walks OID to scavenge for information.
oids={}
for (errorIndication,
errorStatus,
errorIndex,
varBinds) in nextCmd(SnmpEngine(),
CommunityData(self.cs),
UdpTransportTarget((self.device.split(".")[0], 161), timeout=60, retries=0),
ContextData(),
ObjectType(ObjectIdentity("1.3.6.1.4.1.14179.1.2.5.5"))):
print((errorIndication,
errorStatus,
errorIndex,
varBinds))
并反复收到以下输出:
(RequestTimedOut('No SNMP response received before timeout',),
我已进行了三次检查,以确保我的社区字符串,SNMP版本,设备名称,端口和OID正确。我已经更改了运输超时变量60秒,但是没有运气。我首先想到的可能是防火墙问题,但是后来我尝试运行文档中包含的简单示例:
from pysnmp.hlapi import *
g = getCmd(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget(('demo.snmplabs.com', 161)),
ContextData(),
ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)))
print(next(g))
并接收完全相同的输出。有谁知道这可能是什么原因?不幸的是,我在具有很少管理员权限的服务器上,所以我无法深入研究更改任何内容的模块文件。预先感谢您的帮助!
答案 0 :(得分:0)
您的代码看起来不错。只要您从self.device.split(".")[0]
中获得正确的主机名/ IP。
可能是由于某种原因而没有收到SNMP代理的响应。我会尝试使用公共SNMP代理:
$ snmpwalk -v2c -c public demo.snmplabs.com 1.3.6
SNMPv2-MIB::sysDescr.0 = STRING: Linux zeus 4.8.6.5-smp #2 SMP Sun Nov 13 14:58:11 CDT 2016 i686
...
确保没有连接/防火墙问题。也可以考虑对您的本地SNMP代理尝试snmpwalk
。如果您尚未安装Net-SNMP,请考虑尝试snmpclitools进行此实验。