Python PYSNMP避免将DISMAN-EVENT-MIB事件作为陷阱

时间:2015-06-01 13:33:08

标签: python snmp pysnmp

我们正在尝试使用自定义MIB使用PYSNMP模块发送自定义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-Event作为其中的一部分。

1 个答案:

答案 0 :(得分:1)

格式良好的SNMP v2c / v3通知必须在其var-bindings列表的开头包含两个特定的OID。那些OID是sysUpTime和snmpTrapOID。如果你把它们遗漏,这将违反协议。所以pysnmp会将这些OID添加到PDU中。

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

  • 如果需要支持所有SNMP版本,请使用最新的(CVS)版本的pysnmp库及其标准SNMP应用程序API。 pysnmp.entity.rfc3413.ntforg.NotificationOriginator.sendPdu()方法接受user-supplied PDU对象。
  • 如果性能很重要且不需要SNMPv3,请使用数据包级trap sender

这两个API都允许您使用您认为适合的任何变量绑定发送自己的PDU。