简介:
在snmp代理的开发过程中,我们经常需要发送告警信息到snmp服务站。正如我们所知道的,snmptrap发送到服务站的162号默认端口,并且采用的是udp方式通信。snmp目前有三个版本,其中v1、与v2在加密方面要逊色很多,而到了v3版本才将加密功能完善优化。V1的版本比较基础,V2版本在基于V1版本上增加了分布式管理等功能。
这里我们主要分析一下v1、v2两个版本在发送snmptrap时的区别,仅作为参考使用
一 v1版本的snmptrap
snmptrap | -v | 1 | -c | public | dst hostip | enterprise id | agent id | trap 类型 | trap的特殊标示 | snmp时间戳 | OID | 数据类型 | 数据 |
字段含义:
dst hostip 为发送的目的地址,或者说是管理站的ip。
enterprise id为 私有oid的标示字段。可以为空,若为空的话,snmp默认id为1, 3, 6, 1, 4, 1, 3, 1, 1。
agent id 为发送snmptrap代理的ip,可以为空,为空的话snmptrap会主动去获取代理的ip(这就因代理的系统、软件的差别还不同了,snmp代理不一定能获取到所有类型系统的ip地址)
trap类型:
0-代理进行了初始化(coldstart)
- 代理进行了重新初始化(warmstart)
- Linkdown
- Linkup
- 从SNMP管理进程接收到具有一个无效共同体的报文
- 一个EGP相邻路由器变为故障状态
- 自定义
trap的特殊标示:一般取0值就可以了。
snmp时间戳:可以为空,为空的话,系统会去查找最近一次重启代理进程(snmpd)的时间
OID:需要发送的OID值。
数据类型:待发送的数据类型,例如i 表示整数,s表示字符串。
数据:要发送的数据。
一个简单的例子
snmptrap -v1 -c public 192.168.0.102 1.3.6.1.4.1.1 192.168.0.102 6 10 100 1.3.6.1.9.9.44.1.2.1 i 12 1.3.4.1.2.3.1 s aaa
二、v2版本的snmptrap的格式相对来说比v1简单许多,兼容性和扩展性也好一些,建议使用V2版本的trap。
snmptrap | -v | 2c | -c | public | dst hostip | trap时间戳 | snmptrap表示oid | OID | 数据类型 | 数据 |
字段分析:
dst hostip :为发送的目的地址,或者说是管理站的ip。
trap时间戳:snmp代理默认发送snmp的时间戳,时间戳的oid为默认1, 3, 6, 1, 2, 1, 1, 3, 0。如果这个不需要的话,大家可以去研究一下snmp源码,将其注释掉就行了。
snmptrap表示oid:默认为1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0。这也是snmp代理默认发送,如果大家不需要,也可以去源码中将其注释。
注意:在修改snmp代码时千万不要去修改snmo内核代码,这个是开发snmp的经验之谈。再没有充分证据之前,千万别去修改内核,包括get、set等开发,不然会引起你想不到的问题。
一个简单的例子
snmptrap -v 2c -c public 192.168.1.105 1 2 1.3.6.1.2.1.1.3.1.1.1 i 3
对于V3版本的trap,因涉及到加密认证,再次先不做介绍,后续有时间会更进。