【问题标题】:PySNMP SNMPV3 Trap not being sentPySNMP SNMPV3 陷阱未发送
【发布时间】:2017-11-08 04:49:22
【问题描述】:

我正在实现 snmpv3 的 pysnmp 代码,试图将陷阱发送到我网络中的机器。我可以看到在 Wireshark 中可以看到陷阱,但它没有出现在我的任何陷阱接收器中。代码如下:

from pysnmp.hlapi import *

errorIndication, errorStatus, errorIndex, varBinds = next(
    sendNotification(
        SnmpEngine(OctetString(hexValue='8000000001020304')),
        UsmUserData('usr', authKey='authh', privKey='privv',
                    authProtocol=usmHMACSHAAuthProtocol,
                    privProtocol=usmAesCfb128Protocol), 
        UdpTransportTarget('192.168.1.79',162),
        ContextData(),
        'trap',
        NotificationType(ObjectIdentity('SNMPv2-MIB', 'authenticationFailure'))
    )
)

if errorIndication:
    print(errorIndication)

如果我删除 authKey、privKey、authProtocol 和 privProtocol,我可以看到陷阱接收器中接收到的陷阱,但是当我将它们全部放入时,我看不到陷阱。

我的问题是:

  1. ubuntu 是否需要打开 161 和 162 端口才能让 windows 机器接收?
  2. 即使使用硬编码的引擎 ID,我也可以发送无需身份验证的陷阱,但在完全身份验证的情况下是否需要正确的引擎 ID?这就是陷阱没有出现的原因吗?如果是这样,有人可以指导我找到接收系统的引擎 ID 吗?
  3. 我们可以肯定地说,既然 Wireshark 清楚地看到了陷阱,那么它只是在陷阱接收器上进行配置以显示陷阱吗?

请帮帮我。

谢谢。

【问题讨论】:

    标签: python-2.7 mib pysnmp pyasn1 asn.1


    【解决方案1】:

    确保您的 SNMPv3 密钥长度为 8 个或更多字符。这是 SNMP 标准附带的要求。

    使用 SNMPv3 TRAP,如果您使用任何加密功能,您需要为通知发起者(您的脚本)和通知接收者显式配置 SNMP 引擎 ID。

    您应该为您的通知发起者设置任意 SNMP 引擎 ID(它是此交换中的权威部分),然后为您的通知接收者配置相同的 SNMP 引擎 ID(以及 USM 用户和密钥)。无需计算接收方的 SNMP 引擎 ID。

    这可能不是防火墙问题,因为纯文本 TRAP 可以通过。

    可以尝试更简单的设置,例如 MD5 身份验证和不加密 (authNoPriv)。以防您的通知接收器不支持较新的密码套件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多