pysnmp:打印机佳能返回错误“超时前未收到SNMP响应”(Xerox和HP正常)

时间:2018-10-16 07:57:05

标签: python snmp pysnmp

尝试使用pysnmp传递真实的snmp。 如果我的主机是Xerox或HP打印机,则我的代码正在运行,并且可以访问变量varBinds[0][1]中的oid值:

from pysnmp.entity.rfc3413.oneliner import cmdgen # snmp requests

cmdGen = cmdgen.CommandGenerator()
modeliod = ".1.3.6.1.2.1.25.3.2.1.3.1"
hostname = "192.168.1.100"

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

但是,当我尝试访问佳能打印机的OID值时,则比errorIndication = No SNMP response received before timeout多。另一方面,当我将snmpwalk与佳能的IP和相同的iod一起使用时,我可以得到一个值。

我的平台是Windows 10 x64。

如何解决“超时前未收到SNMP响应”问题?

Update1

排线:

from pysnmp import debug
debug.setLogger(debug.Debug('io', 'msgproc', 'secmod'))

调试输出很大,因此我将其粘贴到这里:https://pastebin.com/Lpyqm9NK

Update2

在SNMP get请求版本中似乎存在问题:当我将snmpwalk请求中的版本更改为2c时,我收到相同的错误:%Failed to get value of SNMP variable. Timeout.

第二个问题是

如何在我的代码中更改snmp版本?

2 个答案:

答案 0 :(得分:0)

确保您:

  • 为佳能打印机使用正确的IP,SNMP社区名称和SNMP版本(1 vs 2c)
  • 您的佳能打印机提供您要获取的OID( 1.3.6.1.2.1.25.3.2.1.3.1
  • 您没有某种基于主机的防火墙来阻止脚本的流量,特别是%-)

如果一切正常,请尝试启用pysnmp调试,以查看结果,发现的内容(如果有的话)以及佳能打印机从哪个IP地址响应。如果它是通过与您查询的IP不同的IP进行响应的,则pysnmp将删除此类响应。

要启用pysnmp调试,请在脚本开头添加以下代码段:

from pysnmp import debug

debug.setLogger(debug.Debug('io', 'msgproc', 'secmod'))

更新:

默认情况下,使用SNMPv2c。要更改v1的SNMP版本,请将mpModel设置为零:

...
CommunityData('public', mpModel=0),
...

答案 1 :(得分:0)

根据文档,这是一个工作环境: http://snmplabs.com/pysnmp/examples/hlapi/asyncore/sync/manager/cmdgen/snmp-versions.html

from pysnmp.hlapi import *
errorIndication, errorStatus, errorIndex, varBinds = next(
    getCmd(SnmpEngine(),
           CommunityData('public', mpModel=0),
           UdpTransportTarget((hostname, 161)),
           ContextData(),
           ObjectType(ObjectIdentity(modeliod))) )