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,其中包含您认为适合您情况的任何变量绑定。
我们正在尝试使用 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,其中包含您认为适合您情况的任何变量绑定。