[英]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.