[英]python snmp bad IP
我有问题 pysnmp 库。 我试图从我的路由器 SNMP 中读取信息。 snmpwal 工作没有问题......
from pysnmp.hlapi import *
router_ip = '192.168.88.254'
community = 'public'
errorIndication, errorStatus, errorIndex, varBinds = next(
getCmd(SnmpEngine(),
CommunityData(community),
UdpTransportTarget((router_ip, 161)),
ContextData(),
ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysName', 0)),
)
)
if errorIndication:
print(errorIndication)
elif errorStatus:
print('%s at %s' % (errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
else:
for varBind in varBinds:
device_name = varBind[1].prettyPrint()
print(device_name)
错误是:
python3 snmp.py
Traceback (most recent call last):
File "/home/lamzaks/.local/lib/python3.10/site-packages/pysnmp/smi/rfc1902.py", line 505, in resolveWithMib
instIds = rowNode.getInstIdFromIndices(*self.__args[2:])
File "/home/lamzaks/.local/lib/python3.10/site-packages/pysnmp/smi/mibs/SNMPv2-SMI.py", line 1281, in getInstIdFromIndices
syntax = mibObj.syntax.clone(indices[idx])
File "/home/lamzaks/.local/lib/python3.10/site-packages/pysnmp/proto/rfc1902.py", line 232, in clone
return univ.OctetString.clone(self, *args, **kwargs).setFixedLength(self.getFixedLength())
File "/home/lamzaks/.local/lib/python3.10/site-packages/pyasn1/type/base.py", line 376, in clone
return self.__class__(value, **initializers)
File "/home/lamzaks/.local/lib/python3.10/site-packages/pyasn1/type/univ.py", line 837, in __init__
base.SimpleAsn1Type.__init__(self, value, **kwargs)
File "/home/lamzaks/.local/lib/python3.10/site-packages/pyasn1/type/base.py", line 267, in __init__
value = self.prettyIn(value)
File "/home/lamzaks/.local/lib/python3.10/site-packages/pysnmp/proto/rfc1902.py", line 330, in prettyIn
raise error.ProtocolError('Bad IP address syntax')
pysnmp.proto.error.ProtocolError: Bad IP address syntax
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/lamzaks/snmp.py", line 9, in <module>
errorIndication, errorStatus, errorIndex, varBinds = next(
File "/home/lamzaks/.local/lib/python3.10/site-packages/pysnmp/hlapi/asyncore/sync/cmdgen.py", line 108, in getCmd
cmdgen.getCmd(snmpEngine, authData, transportTarget,
File "/home/lamzaks/.local/lib/python3.10/site-packages/pysnmp/hlapi/asyncore/cmdgen.py", line 130, in getCmd
vbProcessor.makeVarBinds(snmpEngine, varBinds), __cbFun,
File "/home/lamzaks/.local/lib/python3.10/site-packages/pysnmp/hlapi/varbinds.py", line 39, in makeVarBinds
__varBinds.append(varBind.resolveWithMib(mibViewController, ignoreErrors=False))
File "/home/lamzaks/.local/lib/python3.10/site-packages/pysnmp/smi/rfc1902.py", line 853, in resolveWithMib
self.__args[0].resolveWithMib(mibViewController)
File "/home/lamzaks/.local/lib/python3.10/site-packages/pysnmp/smi/rfc1902.py", line 509, in resolveWithMib
raise SmiError('Instance index %r to OID conversion failure at object %r: %s' % (
pysnmp.smi.error.SmiError: Instance index (0,) to OID conversion failure at object 'ipAdEntAddr': Bad IP address syntaxcaused by <class 'pysnmp.proto.error.ProtocolError'>: Bad IP address syntax
有没有人有类似的情况?
我正在尝试从 SNMP 设备获取信息.. 如果我使用 SNMPwalk -v2c -c public 它可以工作
背后的原因可能是您正在测试的 SNMP 代理中存在错误,
https://github.com/lextudio/pysnmp/blob/v5.0.20/pysnmp/proto/rfc1902.py#L322
您可以从其源代码中看到,当它尝试解析来自 SNMP 代理的传入数据时,它只是希望所有 IP 数据仅为 IPv4。 然而,这个代理似乎返回了意外的字节。
错误消息中没有显示意外字节,所以如果你想深入挖掘,你需要使用 Wireshark 等工具捕获网络数据包。 然后您可以轻松地分析 Wireshark GUI 中的字节。
或者
snmpwalk
有一个转储原始字节的开关。 但是您需要成为 SNMP 专家才能以原始格式读取这些字节。
那里有很多非标准的 SNMP 代理,因此此类问题很常见。 如果这个代理试图返回 IPv6 地址,它应该使用
Ipv6Address
文本约定,而不是IP
数据类型, https://datatracker.ietf.org/doc/html/rfc2465
snmpwalk
有效? 在这种情况下,其他流行的 SNMP 库可能更能容忍。 例如, snmpwalk
命令行实用程序基于 C 中编写的 .NET-SNMP 库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.