尝试使用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
)
但当我试图访问Canon printer的OID值时,errorIndication
=No SNMP response received before timeout
。另一方面,当我将snmpwalk
与Canon的IP和相同的iod一起使用时,我可以接收到一个值。在
我的平台是Windows10x64。在
如何解决“超时前未收到SNMP响应”问题?
更新1
借记行:
^{pr2}$调试输出很大,所以我把它粘贴在这里:https://pastebin.com/Lpyqm9NK
更新2
在snmpget请求的版本中似乎有一个问题:当我将snmpwalk
请求中的版本更改为{%Failed to get value of SNMP variable. Timeout.
所以,第二个问题是
如何在代码中更改snmp版本?
根据文件,这里是一个工作区: http://snmplabs.com/pysnmp/examples/hlapi/asyncore/sync/manager/cmdgen/snmp-versions.html
确保您:
如果一切正常,请尝试启用pysnmp调试,以查看输出、输入(如果有)以及佳能打印机响应的IP地址。如果它从与您查询的IP不同的IP进行响应,那么pysnmp将放弃此类响应。在
要启用pysnmp调试,请在脚本开头添加以下代码段:
更新:
默认情况下,使用SNMPv2c。要将v1的SNMP版本设置为0,请执行以下操作:
^{pr2}$相关问题 更多 >
编程相关推荐