trap是某种入口,到达该入口会使SNMP被管设备主动通知SNMP管理器,而不是等待SNMP管理器的再次轮询。在网管系统中,被管设备中的代理可以在任何时候向网络管理工作站报告错误情况,例如预制定阈值越界程序等等。代理并不需要等到管理工作站为获得这些错误情况而轮询他的时候才会报告。
trap语法定义规则包括以下几部分:
1.TRAP-TYPE:标识下面定义的是一个trap。
2.enterprise:企业标识,已经定义好的合法的标识。本域必须提供定义此trap的企业标识,标识这个trap是哪个企业定义的。这个值将被放在trapPDU的enterprise字段内。
3.variables:变量定义了MIB对象的有序序列,这些对象包含在每个trap类型的实例中。每个变量按顺序被放置在SNMP Trap PDU的variable-bindings中。
4.description:Trap的描述。
5.reference:参考,可选项,用于和其他MIB模块中定义的trap的description进行相互参照。如果新定义一个trap,reference指向本trap,则表示新trap的description参考本trap的description。
6.value:trap的值是整数,其值为enterprise下的唯一值。value将放在Trap PDU的专用字段(special-trap)内。该值用以唯一地标识一个trap,在enterprise值相同的情况下,value用来标识具体的trap。
snmp中预定义的trap:
snmp协议中定义了6种基本的trap,这6种trap可以涵盖大部分设备的主要状态改变,与企业自定义trap配合使用,就可以处理几乎所有的重要状态改变情况。
1.coldStart:snmp发送实体正在重新初始化,以修改代理的配置或协议实例的实现,特别是由于崩溃或重大故障而引起的意外重启。
2.warmStart:发送实体正在重新初始化,但不修改代理的配置或协议实例的实现。
3.linkDown:表示代理的一个通信连接失败。
4.linkUP:表示代理的一个通信连接成功。
5.authenticationFailure:表示发送方的snmp消息检验失败
6.egpNeighborLoss:表示发送协议实体的EGP邻居已被标记为Down,相邻关系已经不存在。
企业专用trap:snmp定义的6个trap可以涵盖大部分的情况,但是很多情况下设备有自己特殊的状态,企业也希望发送或接收自己定义的trap以得到特殊的消息。使用trap定义宏就可以定义企业自己的trap。企业设备发送自定义trap时,必须同时定义trap的MIB一起分发出去,否则,其他管理站不能识别自定义trap的格式。
trap的PDU结构:
额...这怎么贴图啊?
PDU Type Enterprise Agent-addr Generic-trap Specific-trap Time-stamp Variable-bindings
不好意思,PDU结构如上,大家自己想象着把框框加上吼...
字段 | 类型 | 说明 |
PDU Type | | PDU类型,Trap为4 |
Enterprise | Object Identifier | 产生该Trap的网络管理子系统,基于sysObjectID。如果是企业自定义Trap,此值为企业在enterprise子树下的注册子树。 |
Agent-addr | NetworkAddress | 产生Trap的SNMP实体地址,一般为代理地址 |
Generic-trap | Integer | 通用trap类型,取值为coldStart、warmStart、linkDown、linkUp、authenticationFailure、egpNeihborLoss、enterpriseSpecific |
Specific-trap | Integer | 当Generic-trap为enterpriseSpecific时,specific-trap指明具体的企业自定义Trap类型,specific-trap跟在enterprise后面,组成了Trap的标识 |
Time-stamp | TimeTicks | 上次初始化网络实体和产生Trap的时间间隔,包含sysUpTime值 |
Variable-bindings | Sequences of | 和Trap相关的附加信息 |
generic-trap字段取值意义为:coldStart(0);warmStart(1);linkDown(2);linkUp(3);authenticationFailure(4);egpNeighborLoss(5);enterpriseSpecific(6); 0~5是标准trap,6是专用trap。
SNMPv2 trap数据包格式为:
PDU Type Request-id Error-status Error-index Variable-bindings
(框框要自己想象着加哦)
字段 | 类型 | 说明 |
PDU Type | | PDU类型 |
request-id | Integer | 发送实体通过给每个PDU赋一个id使每一个到同一代理的请求能够被唯一识别,代理应答时原封不动返回request-id值,使发送方可以将应答和请求匹配,也可以使双方有能力处理UDP中可能产生的重复发送的消息 |
Error-status | Integer | 用于表示在处理请求时出现的异常,对于trap数据包该字段为0。 |
Error-index | Integer | 错误索引,对于trap数据包该字段为0。 |
variableBindings | Sequences of | 所要求的实例列表 |
最近在学习trap,故把看到的一些写下来。本文参考《SNMP简单网络管理协议》 电子工业出版社 李明江编著