使用snmp4j监听trap,也可以不用这样的方式
/** *
* 测试snmp4j 中trap的接收方法.这里只测试了v1和v2的trap.
* trap接收原理:snmp实例在注册了实现CommandResponder的listener之后,可以通过异步调用的方法
* 将收到内容输出.
* listen()启动监听线程,该线程中的操作是监听指定端口,在收到trap告警之后将调用
* listener.processPdu(CommandResponderEvent event)方法,由processPdu来处理trap信息.
*/
import org.snmp4j.CommandResponder;
import org.snmp4j.CommandResponderEvent;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.transport.DefaultUdpTransportMapping;
public class TrapTest {
public static void main(String[] args){
try {
//snmp4j通过transportmapping的监听端口接收SNMP信息,所以这里初始化一个
//transportmapping,
//注明本机的IP地址及接收trap的端口.
TransportMapping transport = new DefaultUdpTransportMapping(new UdpAddress("127.0.0.1/162"));
//创建一个处理消息的snmp实例
Snmp snmp = new Snmp(transport);
//CommandResponder是一个listener,用以处理获取的trap消息
CommandResponder trapPrinter = new CommandResponder(){
public synchronized void processPdu(CommandResponderEvent e){
PDU command = e.getPDU();
if(command!=null){
//这里示例输出trap的内容.具体的trap解析等工作在这里进行.
System.out.println(command.toString());
}
}
};
//在snmp实例中添加CommandResponder listener
snmp.addCommandResponder(trapPrinter);
System.out.println("start listening!");
//开始启动trap监听.listen()方法内部启动了一个线程,这个线程监听发送到transport中定义的端口
//的消息.
transport.listen();
System.out.println(transport.isListening());//测试监听是否正常
//等待一段测试时间,在这段时间可以发送trap信息测试.
Thread.sleep(180000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
运行结果如下:
start listening!
true
V1TRAP[reqestID=0,timestamp=0:00:00.00,enterprise=0.0,genericTrap=2,specificTrap=0, VBS[]]
V1TRAP[reqestID=0,timestamp=0:00:00.00,enterprise=0.0,genericTrap=2,specificTrap=0, VBS[]]
TRAP[requestID=1762734632, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.3.0 = 0:00:00.00; 1.3.6.1.6.3.1.1.4.1.0 = 1.3.6.1.6.3.1.1.5.3]]
TRAP[requestID=1762734633, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.3.0 = 0:00:00.00; 1.3.6.1.6.3.1.1.4.1.0 = 1.3.6.1.6.3.1.1.5.3]]
TRAP[requestID=1762734634, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.3.0 = 0:00:00.00; 1.3.6.1.6.3.1.1.4.1.0 = 1.3.6.1.6.3.1.1.5.3]]
TRAP[requestID=1762734635, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.3.0 = 0:00:01.11; 1.3.6.1.6.3.1.1.4.1.0 = 1.3.6.1.6.3.1.1.5.3]]
这里测试发送了6条trap,第1,2条为v1trap,第3,4,5,6条为v2trap.最后一条时间稍有改变.
trap的输出的内容就这些,具体内容按照实际情况而定.
*/
这里有个问题,没有做测试:
在收到第一个trap信息后处理该trap消息,如果不采用多线程处理该trap消息,将会导致在trap处理时间内发送过来的另一个trap消无法接收而丢失.具体有无采用多线程处理可以通过测试得出.如果没采用多线程处理,那么有必要在processPdu方法中使用线程来处理该trap事件.
分享到:
相关推荐
一个用SNMP4J编的读取OID值的源码 SNMP4J开发trap监听实例 snmp4j获取数据实例
SNMP++是由.net-Solutions GmbH开发的C++库,它提供了对SNMP协议的全面支持,包括Trap的发送和接收。在MFC中集成SNMP++,可以利用其丰富的功能来构建网络管理应用。 **1. 安装和配置SNMP++库** 在使用SNMP++之前,...
SNMP4J是一个开源的Java实现的简单网络管理协议(SNMP)库,它提供了全面的API用于开发SNMP应用程序。本文将深入解析SNMP4J API的核心概念和主要功能,帮助开发者理解和利用这个强大的工具。 ## SNMP简介 SNMP,即...
4. **事件处理**:SNMP4J使用了Java的监听器模式来处理SNMP事件,如Trap接收、Response回调等。源码中的`CommandResponder`和`CommandResponderEvent`接口及其相关实现,可以帮助我们理解如何编写响应SNMP请求的代码...
本文将深入探讨如何使用SNMP4J-Agent工具在个人计算机上模拟SNMP服务,以便进行测试和开发。 SNMP4J-Agent是SNMP4J项目的一部分,是一个开源的Java库,用于实现SNMP代理功能。它提供了丰富的API,可以方便地构建...
SNMP4J是一个Java实现的简单网络管理协议(SNMP)的应用编程接口(API),它为开发者提供了在Java环境中开发SNMP应用的工具。本文档将深入探讨SNMP4J的相关知识点,帮助读者掌握SNMP协议的基础以及如何利用SNMP4J...
SNMP4J是一个开源的Java实现的简单网络管理协议(SNMP)库,适用于开发SNMP应用程序。2.3.0版本是这个库的一个特定发行版,提供了对SNMP v1、v2c和v3的支持。在深入探讨SNMP4J的源码之前,我们需要先了解SNMP的基本...
这个“nmi.rar”压缩包内包含了一个使用SNMP4J开发的agent端程序,它提供了网络设备管理和监控的能力。在本文中,我们将深入探讨SNMP4J的核心概念、如何使用SNMP4J构建SNMP代理,以及在实际应用中的注意事项。 首先...
SNMP4J是一个Java实现的简单网络管理协议(SNMP)库,用于开发与SNMP兼容的网络管理系统或应用程序。SNMP是一种广泛用于网络设备管理的标准协议,它允许管理员远程监控和配置网络设备,如路由器、交换机和服务器。在...
在`TrapReceiver_SNMP4J.java`中,开发者可能首先初始化SNMP引擎,设置安全模型和上下文,然后创建一个Trap监听器。当设备发送Trap时,监听器会接收到一个`TrapEvent`对象,从中可以获取到事件的相关信息,如Trap...
Snmp4J是一个Java实现的简单网络管理协议(SNMP)的应用编程接口(API),它为开发者提供了在Java环境中开发SNMP应用的工具。SNMP是网络管理的标准协议,主要用于监控和管理网络设备,如路由器、交换机、服务器等。...
SNMP4J是Java开发SNMP(简单网络管理协议)应用程序的一个开源库,它提供了全面的SNMP协议实现,包括v1、v2c和v3版本。在本文中,我们将深入探讨SNMP4J的核心功能、使用场景、以及如何通过这个库来实现网络设备的...
SNMP4J作为Java平台上的强大SNMP库,为开发人员提供了丰富的功能,简化了网络管理应用的开发。通过理解SNMP协议原理和SNMP4J的使用方法,开发者可以轻松地实现对网络设备的监控和管理,提高网络运维效率。
7. **其他操作**:除了GET请求,snmp4j还支持SET操作(修改设备配置)、Trap操作(接收设备发出的陷阱通知)等。只需更改PDU的类型(如PDU.SET或PDU.TRAP),并相应地填充数据。 8. **异常处理**:在实际应用中,...
2. **创建Trap监听器**:服务器需要监听特定端口以接收来自SNMP代理(Agent)的Trap消息。这通常通过创建`CommandResponder`或`TransportMapping`实例来完成,然后将其注册到SNMP引擎。 3. **定义Trap处理逻辑**:...
"snmp4j.listenAddress", "udp:192.168.1.23/162")); // 设置监听地址 TransportMapping transport; if (listenAddress instanceof UdpAddress) { transport = new DefaultUdpTransportMapping((UdpAddress) ...
7. **示例代码**:DOME通常指的是示例或演示,可能包含使用SNMP4J进行基本操作的Java代码,如获取设备信息、设置设备配置或监听陷阱(Trap)事件。 为了充分利用SNMP4J,你需要熟悉SNMP协议的基本概念,理解MIB结构...
通过Java实现SNMP通信,不仅可以监控和管理网络设备,还能在开发过程中充分利用现成的开源库,如SNMP4J,大大降低了开发难度。掌握SNMP协议的基本原理和Java实现技巧,对于网络管理员和软件开发者来说都是极为宝贵的...
总的来说,“网络管理-SNMP4J应用”包是一个实用工具,可以帮助开发人员快速上手SNMP4J,实现对oid列表类型的获取。通过学习和使用这个程序,你可以深入理解SNMP协议以及如何在Java环境中有效地利用SNMP4J库进行网络...
`snmp4j.jar`提供了`NotificationReceiver`接口来接收Trap。你可以实现这个接口并注册一个监听器,当接收到Trap时,监听器的回调函数会被调用。 7. **错误处理和重试策略**:在实际应用中,你需要考虑网络延迟和...