从Django vi调用pysnmp发送超时

2024-06-20 15:15:18 发布

您现在位置:Python中文网/ 问答频道 /正文

Im reitryng从某个网络交换机获取一些孩子,为此,Im使用一个名为pysnmp的purepyton库。它的安装没有问题。在

使用了一个有效的示例代码。在

    from pysnmp.entity.rfc3413.oneliner import cmdgen
    cmdGen = cmdgen.CommandGenerator()
    datos = []
    ip = 'theipaddress'
    comunidad_snmp = 'thecomunityv2c'

    errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
            cmdgen.CommunityData(comunidad_snmp),
            cmdgen.UdpTransportTarget((ip, 161)),
            '.1.3.6.1.2.1.1.1.0', # sysDescr.0
            lookupNames=True, lookupValues=True
    )

    if errorIndication:
             print(errorIndication)
    elif errorStatus:
            print(errorStatus)
    else:
            for name, val in varBinds:
                    datos.append({'nombre': name.prettyPrint(), 'valor': val.prettyPrint()})

    print datos

我们的问题是,如果我在任何视图中复制这段代码,结果总是

^{pr2}$

我们有什么需要补充的吗?。在

环境是6美分


Tags: 代码nameiptruesnmpprintimpysnmp
1条回答
网友
1楼 · 发布于 2024-06-20 15:15:18

可能是Django主机的SNMP/UDP查询被过滤了,而命令行测试却没有?在

深入研究:您的代码使用默认的、基于异步的传输调用pysnmp。如果Django(或它的一些组件)以非合作的方式使用asyncore,pysnmp/Django系统可能会以某种方式干扰。。。避免此类干扰的一种方法是使用您自己的pysnmp I/O套接字对象映射,如下所示:

...
from pysnmp.carrier.asynsock.dispatch import AsynsockDispatcher

cmdGen.snmpEngine.registerTransportDispatcher(AsynsockDispatcher())

mySockMap = {}
cmdGen.snmpEngine.transportDispatcher.setSocketMap(mySockMap)
...

另一个想法是启用pysnmp调试以查看其中发生的情况:

^{pr2}$

还有其他不太详细的pysnmp调试标志(请参见pysnmp.debug). 在

相关问题 更多 >