未发送PySNMP SNMPV3陷阱

时间:2017-11-08 04:49:22

标签: python-2.7 mib pysnmp pyasn1 asn1

我正在为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是否必须打开其用于Windows机器的161和162端口才能接收它?
  2. 即使使用硬编码的引擎ID,我也可以发送没有身份验证的陷阱,但是在完全身份验证的情况下是否需要拥有正确的引擎ID?这就是陷阱没有出现的原因吗?如果是这样,有人可以指导我找到接收系统的引擎ID吗?
  3. 我们可以肯定地说,由于Wireshark清楚地看到了陷阱的来临,它只是在Trap接收器上配置以显示陷阱吗?
  4. 请帮助我。

    谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

自从纯文本TRAP通过后,它可能不是防火墙问题。

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