发送包含自定义数据的SNMP陷阱

5
一个客户要求我们不再向他们发送电子邮件警报,而是改为向他们的Nagios服务器发送SNMP Traps。在昨天之前,我唯一知道关于SNMP的事情就是它听起来像一个首字母缩略词,因此请原谅(并纠正)我可能有的任何误解。
在trap中需要发送的唯一信息与我们向客户发出警报的事件相关的数据有关,这只是从我们的数据库中获取的几个值。不用说这些不在任何MIB中,也没有任何OID,这就是我在寻找答案时遇到困难的地方。
我无法想象出如何在不使用MIB OID的情况下将我们的特定数据添加到trap中。
我正在使用PySNMP生成请求,目前只有不完整的代码,因为我不确定如何将我们的数据合并到数据包中。
from pysnmp.hlapi import *

def sendSNMP(destination, community_string, data):
    community = CommunityData(community_string, mpModel = 0)
    target = UdpTransportTarget((destination, 162))
    notification_type = None
    req = sendNotification(SnmpEngine(), community, target, ContextData(), 'trap', notification_type)
    errorIndication, errorStatus, errorIndex, varBinds = next(req)

感谢任何协助!谢谢。

2个回答

5

从纯技术层面上说,您可以为任何目的使用任何OID。然而,SNMP是作为一个由委员会管理的协议设计的。

如果您的陷阱或其varbinds不符合标准消息/类型,则您的OID应以1.3.6.1.4.1.YOUR_ENTERPRISE_NUMBER开头。如果您的公司或客户没有注册私人企业号(PEN),则可以向IANA申请免费获取。如果有人管理您的PEN,您应该向他们请求一个产品域的OID。

PEN列表中充满了个人的电子邮件地址。在此系统中有一定的行业信任因素。与控制竞争对手的企业号的人合作并不罕见。如果您承担PEN的责任,则承担伴随其而来的道德责任。

您不必为企业范围编写或发布MIB,尽管您可能希望为客户编写它们的利益。

SNMP是一种旧的协议。据说首选替代方案是 NETCONF


3

通常,SNMP陷阱内容的结构良好,以便在随机系统之间进行数据交换。该内容由MIB以相当繁琐的方式定义。但是,如果您正在构建一个特定的自定义系统,则可以将任何OID值填充到陷阱中。

示例代码(启用调试以提示正在发送的内容):

from pysnmp.hlapi import *
from pysnmp import debug

debug.setLogger(debug.Debug('msgproc'))

next(sendNotification(SnmpEngine(),
     CommunityData('public'),
     UdpTransportTarget(('demo.snmplabs.com', 162)),
     ContextData(),
     'trap',
     # sequence of custom OID-value pairs
     [ObjectType(ObjectIdentity('1.3.6.1.2.1.1.1.0'), OctetString('my string')),
      ObjectType(ObjectIdentity('1.3.6.1.2.1.1.3.0'), Integer32(42))]))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接