0

我正在为 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 清楚地看到了陷阱,那么它只是陷阱接收器上的配置问题来显示陷阱吗?

请帮我解决一下这个。

谢谢你。

4

1 回答 1

0

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

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

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

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

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

于 2017-11-10T09:27:17.147 回答