簡體   English   中英

python snmp 壞 IP

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM