Python PYSNMP 避免发送 DISMAN-EVENT-MIB 事件作为陷阱的一部分

Python PYSNMP avoid sending DISMAN-EVENT-MIB event as part of traps

我们正在尝试使用 PYSNMP 模块使用自定义 MIB 发送自定义 SNMP 通知,但是当它发送通知时,我们也收到 DISMAN-EVENT-MIB::sysUpTimeInstance 事件作为通知的一部分。我们希望避免同样的情况。 下面是示例脚本

from pysnmp.entity.rfc3413.oneliner import ntforg

ntfOrg = ntforg.NotificationOriginator()

errorIndication, errorStatus, errorIndex, varBinds = ntfOrg.sendNotification(
    ntforg.CommunityData('public'),
    ntforg.UdpTransportTarget(('localhost', 162)),
    'inform',
    ntforg.MibVariable('SNMPv2-MIB', 'sysDescr'),
    ( ntforg.MibVariable('SNMPv2-MIB', 'sysDescr', 0), 'Hello' ),
    lookupNames=True, lookupValues=True
)

if errorIndication:
    print('Notification not sent: %s' % errorIndication)
elif errorStatus:
    print('Notification Receiver returned error: %s @%s' %
          (errorStatus, errorIndex))
else:
    for name, val in varBinds:
        print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))

下面是我进去的结果/var/log/messages

Jun  1 18:56:14 localhost snmptrapd[1194]: 2015-06-01 18:56:14 localhost [UDP: [127.0.0.1]:56469->[127.0.0.1]:162]:
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (0) 0:00:00.00 SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-MIB::sysDescr   SNMPv2-MIB::sysDescr.0 = STRING: Hello

那么我们如何才能避免不发送 DISMAN 事件作为其中的一部分。

格式正确的 SNMP v2c/v3 通知必须在其变量绑定列表的开头包含两个特定的 OID。这些 OID 是 sysUpTime 和 snmpTrapOID。如果您将它们排除在外,那将违反协议。所以 pysnmp 将这些 OID 添加到 PDU 中。

如果可以发送格式错误的数据包,您有两个选择:

  • 如果需要所有 SNMP 版本支持,请使用最新的(CVS) version of pysnmp library along with its Standard SNMP Applications API. The pysnmp.entity.rfc3413.ntforg.NotificationOriginator.sendPdu() method accepts a user-supplied PDU 对象。
  • 如果性能很重要且不需要 SNMPv3,请使用数据包级别 trap sender

这两种 API 都允许您发送自己的 PDU,其中包含您认为适合您情况的任何变量绑定。