SNMP Trap

   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类型,Trap4

Enterprise

Object Identifier

产生该Trap的网络管理子系统,基于sysObjectID。如果是企业自定义Trap,此值为企业在enterprise子树下的注册子树。

Agent-addr

NetworkAddress

产生TrapSNMP实体地址,一般为代理地址

Generic-trap

Integer

通用trap类型,取值为coldStartwarmStartlinkDownlinkUpauthenticationFailureegpNeihborLossenterpriseSpecific

Specific-trap

Integer

Generic-trapenterpriseSpecific时,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简单网络管理协议》 电子工业出版社 李明江编著

Java SNMP Trap是一种用于网络管理的协议,它允许网络设备向网络管理系统发送事件通知。SNMP(Simple Network Management Protocol)是一种用于管理和监控网络设备的标准协议。 在Java中,你可以使用第三方库来实现SNMP Trap的功能,比如SNMP4J。SNMP4J是一个开源的Java库,提供了丰富的API来实现SNMP协议的各种功能,包括发送和接收SNMP Trap。 要使用SNMP4J发送SNMP Trap,你需要以下步骤: 1. 创建一个SNMP Trap发送器对象。 2. 设置目标主机的IP地址和端口号。 3. 创建一个SNMP Trap消息对象,并设置相关属性,如版本号、社区名、通知类型等。 4. 发送SNMP Trap消息。 以下是一个简单的示例代码,演示了如何使用SNMP4J发送SNMP Trap: ```java import org.snmp4j.CommunityTarget; import org.snmp4j.PDU; import org.snmp4j.Snmp; import org.snmp4j.TransportMapping; import org.snmp4j.event.ResponseEvent; import org.snmp4j.mp.SnmpConstants; import org.snmp4j.smi.Address; import org.snmp4j.smi.GenericAddress; import org.snmp4j.smi.OID; import org.snmp4j.smi.OctetString; import org.snmp4j.smi.UdpAddress; import org.snmp4j.smi.VariableBinding; import org.snmp4j.transport.DefaultUdpTransportMapping; public class SNMPTrapSender { public static void main(String[] args) throws Exception { // 设置目标主机的IP地址和端口号 Address targetAddress = GenericAddress.parse("udp:127.0.0.1/162"); // 创建一个SNMP Trap发送器对象 TransportMapping<?> transport = new DefaultUdpTransportMapping(); Snmp snmp = new Snmp(transport); transport.listen(); // 创建一个SNMP Trap消息对象 PDU pdu = new PDU(); pdu.setType(PDU.TRAP); // 设置通知类型为通用陷阱 pdu.add(new VariableBinding(SnmpConstants.sysUpTime, new OctetString("0"))); pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID, new OID("1.3.6.1.4.1.12345.1"))); pdu.add(new VariableBinding(SnmpConstants.snmpTrapAddress, new UdpAddress("127.0.0.1/162"))); pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.1.0"), new OctetString("Test trap"))); // 发送SNMP Trap消息 CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString("public")); target.setAddress(targetAddress); target.setVersion(SnmpConstants.version2c); ResponseEvent response = snmp.send(pdu, target); System.out.println("SNMP Trap sent successfully"); // 关闭SNMP连接 snmp.close(); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值