文档详情

针对开发SNMPTrap的总结

M****1
实名认证
店铺
DOCX
17.15KB
约4页
文档ID:466076583
针对开发SNMPTrap的总结_第1页
1/4

浅谈Linux中开发SNMP TrapSNMP Trap 是一种标准的报告机制,广泛应用在各种网络管理软件中本文详细介绍了 SNMP Trap 的基本概念,以及 Linux 下面 net-snmp 对SNMP Trap的开发与应用1. SNMP Trap简介SNMP简单网络管理协议(Simple Network Management Protocol)是一种应用层协议,是TCP/IP协议族的一部分它使网络设备之间能够方便地交换管理信息能够让网络管理员管理网络的性能,发现和解决网络问题及进行网络的扩充SNMP Trap 是 SNMP 的一部分,当被监控段出现特定事件,可能是性能问题,甚至是网络设备接口宕掉等,代理端会给管理站发告警事件假如在特定事件出现的时刻,不是由 Agent 主动通知 NMS(Network Management Station ),那么 NMS 必须不断地对 Agent 进行轮询这是非常浪费计算资源的方法,正如人们用中断通知 CPU 数据的到达,而不是让 CPU 进行轮询一样Trap 通知是更加合理的选择总的来说,SNMP Trap 就是被管理设备主动发送消息给 NMS 的一种机制。

2. SNMP Trap报文Trap PDU不同于其他类型的PDU格式,Trap PDU包含的部分都是为描述事件而定义的,见下图所示:PDUenterpriseagent-addrgeneric-trapspecific-traptime- stampvar-list…各部分的解释如下:enterprise:企业标识、对象标识agent-addr:产生Trap的被管理设备的地址generic-trap:用于识别Trap的类型,取值0-6,6代表特殊代码的扩展specific-trap:与generic-trap一起标识扩展Trap类型time-stamp:时间戳,系统从上次启动到产生该Trap的系统时间var-list:绑定的对象标识-值等数据3. 设计一个 Trap 消息Trap 消息也是用 MIB 来定义的在下面的例子中,我们定义了一个 Trap 消息:fxPortReset、fxPortResetOK树型结构如下:                 fxBMDevTrap                                    .                +----fxBMDevAlarm                        .                          +----fxBMPortAlarm              .                                   |----fxPortReset         .                                   |----fxPortResetOK         . fxPortReset、fxPortResetOK被定义为 NOTIFICATION类型,即 SNMPv2 类型的 Trap。

4. SNMP Trap的实现把定义的MIB命名为fxBMDevTrap.txt,利用mib2c.notify.conf配置文件,生成fxBMDevTrap.c和fxBMDevTrap.h此生成方法参照mib2c工具的使用由模版生成的文件,不论哪种对象,都会有固定模式的整体结构在模版文件中对节点进行定义,函数定义处理函数,用来处理代理端所要发送的数据,数据的添加就是我们要手工实现的我们所要做的工作就是把所需上报的数据导入到其中模版是针对单个变量来处理的:1)   Trap处理函数int send_fxPortReset_trap( void )其实现主要为:  snmp_varlist_add_variable(&var_list, snmptrap_oid, OID_LENGTH(snmptrap_oid), ASN_OBJECT_ID, fxPortReset_oid, sizeof(fxPortReset_oid));首先添加trap对象,指定告警的对象为fxPortReset如果trap需要根据情况绑定数据,以提供更多事件信息,可继续添加数据到链表,也可指定绑定数据的对象标识符。

snmp_varlist_add_variable(&var_list, fxBMPortIndex_oid, OID_LENGTH(fxBMPortIndex_oid), ASN_INTEGER, (u_char *)&temp, sizeof(temp));如果有多组数据绑定,就要简单重复调用snmp_varlist_add_variable 函数,因此链表var_list包含了指定类型的数据一个 SNMP Trap创建成功后,调用相应的API将其发送出去即可: send_v2trap( var_list );最后需要做清理工作,代码如下: snmp_free_varbind( var_list );具体可参考源代码包~\agent\mibgroup\examples下的notification.c和notification.h文件2) Trap的触发SNMP Trap是由Agent主动发出,NMS不对Trap做响应当某个事件发生时,就会发送Trap消息因此在事件触发时,可以调用上面的Trap处理函数发送相应地事件调用相应的事件处理函数,例如:在端口重启时就可以调用send_fxPortReset_trap(),来发送PortReset的Trap。

3) SNMP_TRAP_API关于SNMP Trap的发送,NET-SNMP给出了三个api函数:send_easy_trap, send_trap_vars, send_v2trapsend_easy_trap: 发送SNMPv1和SNMPv2标准的Trap消息;send_trap_vars: 发送可添加绑定数据的Trap消息;send_v2trap: 支持绑定数据的SNMPv2扩展Trap参照源码,send_easy_trap和send_v2trap最终都是调用send_trap_vars,只是传递参数不同而已5. NET-SNMP Trap实现1) NET-SNMP Trap配置我们将生成的XXX.c和XXX.h静态编译到snmpd进程中,Trap的发送还需指定管理端地址和端口在配置文件中,添加下面关键字:authtrapenable 1 //打开trap自动告警的开关,1代表开启、2代表关闭trapsink host [community] [port] //指定trap发送的地址、共同体和端口共同体和端口可以不指定,默认为public和162SNMPv2的Trap关键字为trap2sink。

2) SNMP Trap查看MG-SOFT管理软件可以接收Trap消息,启动MIB Browser->Tools->Trap Ringer Console在显示面板上可以查看接收到Trap的发送端、接收端、时间、共同体、协议版本、对象以及绑定的数据等信息 SNMP Trap分两大类:标准Trap、扩展Trap 标准Trap: generic字段标示Trap类型,specific字段为0,Time字段表示从snmpd启动到Trap发生所经历的时间,enterprise标示对象sysObjectID的值 扩展Trap: generic字段均为6,enterprise和specific在Trap定义中给出,扩展的 Trap 通常是由以下几个部分连接而成:enterprise + '0' + specific trap可由enterprise和specific一起来判断该Trap对象,其他与标准Trap相同3) 其他问题当开启MG-SOFT软件的Trap Ringer Console工具时,往往出现绑定162端口出错,可能原因是162端口已经被占用解决方法有两种:a) 禁用服务,打开Windows下的本地服务,禁用windows自己的SNMP Trap功能,开启MG-SOFT SNMP Trap Service。

b) 修改端口,打开MIB Browser->View->MIB Browser Preferences,设置Trap Ringer下的Ports,这里默认用的是162,我们也可以改成其他未使用的端口同样地,snmpd的配置文件中trapsink也要指定相同地端口总结本文只关注SNMP Trap 的相关概念和开发方法虽然 SNMP Trap能简单地创建而且轻松地发送到指定管理端,但似乎这并不是重点,关键地事件什么时候发生,以及事件发生后如何通知snmpd进程发送Trap,都可以说是十分复杂的问题对此,作为一个有理想的程序员,还需要坚定不移地继续深入地了解更多 SNMP 的知识。

下载提示
相似文档
正为您匹配相似的精品文档