pysnmp:对于 SNMP V3 陷阱解密,出现错误:“加密服务不可用或密文已损坏”

问题描述 投票:0回答:1

使用 tcpdump 收集并在wireshark 中查看时,可以正确接收和解码陷阱消息。

但是使用 pysnmp lib,出现以下错误:

2023-04-11 11:55:54,792 pysnmp:processIncomingMsg:scopedPDU 解码器失败 2023-04-11 11:55:54,792 pysnmp: StatusInformation: {'errorInduction': DecryptionError('加密服务不可用或密文已损坏'), 'msgUserName': , subtypeSpec >, 编码 iso-8859-1,有效负载 [user1]>} 2023-04-11 11:55:54,792 pysnmp:prepareDataElements:SM失败,statusInformation {'errorInduction':DecryptionError('加密服务不可用或密文已损坏'),'msgUserName':,subtypeSpec>,编码iso- 8859-1,有效负载 [user1]>}

套装版


bcrypt 3.2.0 证书 2022.12.7 cffi 1.14.4 密码学38.0.1 网络米科 3.2.0 帕拉米科 2.7.2 点 23.0.1 层数 3.11 pyasn1 0.4.8 pycparser 2.20 pycrypto 2.6.1 pycryptodomex 3.15.0 皮尔兹玛 0.5.0 PyNaCI 1.4.0 pyOpenSSL 22.1.0 pyserial 3.5 pysmi 0.3.4 pysnmp 4.4.12 PySocks 1.7.1 python-dateutil 2.8.1 皮茨 2020.4 pyvmomi 8.0.0.1.2 PyYAML 5.3.1

我尝试了以下所有链接中提供的解决方案,但问题仍然没有解决:

  1. 在 python v3 虚拟环境中使用 pysnmp 的 SNMP V3 时出现“加密服务不可用”错误

  2. https://github.com/etingof/pysnmp/issues/285(python -c'从Cryptodome.Cipher导入AES')

  3. https://sourceforge.net/p/pysnmp/discussion/46667/thread/623edabb/(我安装并尝试过的pycrypto不存在)

python encryption snmp pysnmp snmp-trap
1个回答
0
投票

SNMP v3 TRAP 是一个相当漫长的仪式

  • 发送时需要设置正确的引擎ID,如this
        snmpEngine = SnmpEngine(OctetString(hexValue="8000000001020304"))
        errorIndication, errorStatus, errorIndex, varBinds = await sendNotification(
            snmpEngine,
            UsmUserData("usr-md5-des", "authkey1", "privkey1"),
            UdpTransportTarget(("localhost", MANAGER_PORT)),
            ContextData(),
            "trap",
            NotificationType(ObjectIdentity("IF-MIB", "linkDown")),
        )

        snmpEngine.transportDispatcher.closeDispatcher()
  • 您还需要与用户注册相同的引擎ID,例如this
    # user: usr-md5-des, auth: MD5, priv DES, securityEngineId: 8000000001020304
    # this USM entry is used for TRAP receiving purposes
    config.addV3User(
        snmpEngine,
        "usr-md5-des",
        config.usmHMACMD5AuthProtocol,
        "authkey1",
        config.usmDESPrivProtocol,
        "privkey1",
        securityEngineId=v2c.OctetString(hexValue="8000000001020304"),
    )

如果你错过了其中一个,它根本就不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.