PySNMP在超时之前没有响应 - 即使有文档示例

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

我已经安装了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))

并获得完全相同的输出。有谁知道这可能导致什么?不幸的是我在一个管理员权限很少的服务器上,所以我不能去挖掘模块文件来改变任何东西。在此先感谢您的帮助!

timeout snmp pysnmp
1个回答
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
...

确保您没有连接/防火墙问题。考虑使用snmpwalk来对抗本地SNMP代理。如果您无法安装Net-SNMP,请考虑尝试使用snmpclitools进行此实验。

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