PySNMP:接收 V3 陷阱 - 引擎 ID

PySNMP: Receiving V3 Traps - Engine ID

我们曾经使用 PySNMP 版本 4.3.1 来接收 SNMP V3 陷阱,并且效果很好。 最近升级到4.4.12版本,陷阱收不到了

我调试了这个问题,发现在 service.py 第 759 行对 __getUserInfo 的调用抛出异常:

        # 3.2.4
        try:
            (usmUserName,
             usmUserSecurityName,
             usmUserAuthProtocol,
             usmUserAuthKeyLocalized,
             usmUserPrivProtocol,
             usmUserPrivKeyLocalized) = self.__getUserInfo(
                snmpEngine.msgAndPduDsp.mibInstrumController,
                msgAuthoritativeEngineId, msgUserName
            )

我认为这是因为陷阱中的引擎 ID 与我创建的用于接收陷阱的用户的引擎 ID 不同。

在这个 question 中,答案是为接收用户和陷阱发送者使用相同的引擎 ID。

如果是这样,为什么它在 PySNMP 4.3.1 版中有效?这是库中的错误吗?引擎 ID 匹配不是强制性的吗?

使用SNMPv3 安全模型,接收方必须知道发出SNMP TRAP 的SNMP 实体的SNMP 引擎ID(所谓的权威引擎ID)。那是因为 TRAP 通信的单向性质没有留下在对话 SNMP 实体之间交换 SNMP 引擎 ID 的机会。

不幸的是,在这方面,pysnmp 中有 a bug - 这可能解释了为什么它以前对你有用。