`
gzcj
  • 浏览: 291220 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

snmp trap的接收(jdmk方式)

阅读更多

   snmp中告警的接收可以使用jdmk中的SnmpTrapListener,采用jdmk接收snmp trap的方式如下,先定义接收的线程,再用继承自SnmpTrapListener的类处理snmp的trap。详细内容见代码。

代码如下:

public class SnmpListener {
   
    /**
     * Main entry point.
     */
    public static void main(String argv[]) {
     
        try {
        	//创建一个DaemonTaskServer处理snmp的traps
        	//你也可以不用DaemonTaskServer,但使用DaemonTaskServer
        	//处理收到的PDU单元,可以更快的腾出来用于接收trap的socket,
        	//这样可以减少丢包(trap是udp包)
	        //把DaemonTaskServer的线程设置为NORM_PRIORITY,这样
        	//trap接收的线程可以优先于trap处理的线程
	    final DaemonTaskServer taskServer = new DaemonTaskServer();
	    taskServer.start(Thread.NORM_PRIORITY);
	    //为snmp的trap包创建分配器(SnmpEventReportDispatcher)和监听器
        //SnmpEventReportDispatcher做为一个线程运行,并且在指定的端口监听traps  
	    final SnmpEventReportDispatcher trapAgent = 
			new SnmpEventReportDispatcher(Integer.parseInt("8085")+1,
						      null,taskServer,null);
	    //把TrapListenerImpl作为snmp trap的监听器
	    // TrapListenerImpl处理trap pdu包
	        trapAgent.addTrapListener(new TrapListenerImpl());
	        final Thread trapThread = new Thread(trapAgent);
		    trapThread.setPriority(Thread.MAX_PRIORITY);
		    trapThread.start();
            Thread.sleep(4000);
       
            println("\n>> Press <Enter> if you want to stop" + 
		    " this SNMP manager.\n");
            java.lang.System.in.read();
            
           
	    //stop the SnmpEventReportDispatcher.
	    trapAgent.close();
	    taskServer.terminate();
        java.lang.System.exit(0);
        } catch(Exception e) {
            java.lang.System.err.println("AsyncManager::main: "+ 
					 "Exception occurred:" + e );
            e.printStackTrace();
        }
    }

 实际处理trap的pdu包的类:

public class TrapListenerImpl implements SnmpTrapListener {

    public void processSnmpTrapV1(SnmpPduTrap trap) {
        println("NOTE: TrapListenerImpl received trap :");
        println("\tGeneric " + trap.genericTrap);
        println("\tSpecific " + trap.specificTrap);
        println("\tTimeStamp " + trap.timeStamp);
        println("\tAgent adress " + trap.agentAddr.stringValue());
    }

    public void processSnmpTrapV2(SnmpPduRequest trap) {
        println("NOTE: Trap V2 not of interest !!!");
    }

    public void processSnmpTrapV3(SnmpScopedPduRequest trap) {
	println("NOTE: TrapListenerImpl received trap V3:");
	println("\tContextEngineId : " + 
		SnmpEngineId.createEngineId(trap.contextEngineId));
	println("\tContextName : " + new String(trap.contextName));
	println("\tVarBind list :");
	for(int i = 0; i < trap.varBindList.length; i++)
	    println("oid : " + trap.varBindList[i].getOid() + " val : " + 
		    trap.varBindList[i].getSnmpValue());
	
    }

    /**
     * print/println stuff...
     */

    private final static void println(String msg) {
	java.lang.System.out.println(msg);
    }

    private final static void print(String msg) {
	java.lang.System.out.print(msg);
    }
}

 

顺便发一段法送SnmpTrapV1的代码:

public static void main(String args[]) {

		try {
			// Bind the adaptor. By default port 161 is used.
			// For the example, we are going to use a on standard port.
			//
			// If you wish to use the standard SNMP ports, just comment
			// out the following line:
			// port = 8085;
			//
			int port = 8085;
			snmpAdaptor = new SnmpAdaptorServer(port);
			println("NOTE: SNMP Adaptor is bound on port " + port);

			// Start the adaptor.
			//
			snmpAdaptor.start();

			// Send a coldStart SNMP Trap.
			//
			print("NOTE: Sending a coldStart SNMP trap to"
					+ " each destination defined in the ACL file...");
			snmpAdaptor.setTrapPort(new Integer(port + 1));
			snmpAdaptor.snmpV1Trap(0, 0, null);
			println("v1 Done.");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 使用snmpAdaptor.snmpV1Trap(0, 0, null)可以像目的端(接收snmp trap的程序)发送一个trap。

分享到:
评论
3 楼 congjl2002 2012-09-25  
误,整理好了在发
phk070832 写道
垃圾代码,一大推的编译错误,整理好了在发表吧。

您一定是缺少了一些必要的包,或者您把错误贴上来大家一起分析
2 楼 phk070832 2012-07-06  
垃圾代码,一大推的编译错误,整理好了在发表吧。
1 楼 congjl2002 2008-08-07  

相关推荐

    snmp trap命令接收软件

    "snmp trap命令接收软件"是一个专为Windows平台设计的小型应用程序,它的主要作用是接收并显示来自SNMP代理的Trap通知。这对于测试和验证SNMP陷阱的正确配置以及监控网络设备的健康状况非常有用。通过使用这个工具,...

    snmp4j实现snmp trap 发送与接收

    SNMP4J 实现 SNMP Trap 发送与接收 SNMP(Simple Network Management Protocol,简易网络管理协议)是一种广泛应用于网络管理的协议,SNMP4J 是一个基于 Java 的 SNMP 库,提供了完整的 SNMP 功能实现。本文将详细...

    snmp_trap 协议接收工具

    `snmp_trap`协议接收工具是针对SNMP Trap消息设计的应用,允许用户在Windows、Linux和Unix系统上接收并处理这些 traps。 SNMP Trap工作原理: 1. 设备触发事件:当网络设备(如路由器、交换机或服务器)遇到预定义...

    snmp++实现Trap接收

    **SNMP++实现Trap接收详解** SNMP(Simple Network Management Protocol)是一种广泛应用于网络设备管理的协议,它允许网络管理员远程监控和管理网络设备。在SNMP中,Trap是一种网络设备向管理站发送的被动通知,...

    SNMP_TRAP监听工具

    "SNMP_TRAP监听工具"正是用于接收并处理这些TRAP消息的应用程序。 SNMP TRAP分为多种类型,包括标准陷阱和自定义陷阱,它们携带了关于网络状态变化或异常事件的信息。例如,当路由器的接口状态改变、存储设备空间...

    snmp trap 接收

    snmp trap 接收

    UDP的发送接收例子 及SNMP trap

    这篇博客通过代码示例深入浅出地讲解了如何利用UDP进行数据发送和接收,并涉及SNMP的Trap机制。 UDP是一种无连接的传输层协议,它不保证数据包的顺序、可靠性和重传,而是以尽可能快的速度传输数据,适合实时性要求...

    用net-snmp的api实现trap接收,windows+linux

    通过以上步骤,你可以创建一个基本的、跨平台的SNMP trap接收器,它可以与网络设备进行通信,接收并处理来自不同设备的trap通知。在实际应用中,你可能还需要考虑安全性,例如使用安全的SNMP版本(如v3),并配置...

    利用SNMP#NET做trap接收器

    创建一个SNMP Trap接收器是网络监控系统的重要组成部分。通过接收并处理这些Trap消息,管理员可以及时了解网络状态,快速响应潜在的问题。以下是一个详细的步骤和知识点: 1. **理解SNMP协议**:SNMP主要由三部分...

    Java使用SNMP4J实现snmp trap接口发送消息_20170808_LK

    2. **Target Address**:Trap的目标地址,即接收Trap的管理站的IP地址和端口号。 3. **Security Parameters**:安全参数,如SNMP版本、社区字符串(对于SNMPv1和v2c)或认证和加密信息(对于SNMPv3)。 4. **...

    snmptrap.zip

    "snmptrap.zip"这个压缩包显然包含了用于在Windows环境下接收和调试SNMP TRAP信息的工具。 **SNMP TRAP详解:** SNMP TRAP是一种异步通信机制,当网络设备遇到异常情况或者发生了预定义的事件(如接口故障、内存...

    C#基于SnmpSharpNet做的SNMP TRAP服务器(包含发送snmp trap消息的测试客户端)

    SNMP TRAP消息其实就是UDP报文,TRAP服务器就是UDP服务器(即接收方,UDP端口为162),发送TRAP消息的其实就是UDP客户端。 本demo包含TRAP接收的服务器和发送TRAP消息的UDP客户端两个部分,基于SnmpSharpNet做的,...

    snmp trap例子 源码

    这个"snmp trap例子 源码"很可能是用VC++编写的,用于帮助开发者理解和实现SNMP Trap机制。 首先,我们来深入理解SNMP和SNMP Trap的基本概念。SNMP是Internet工程任务组(IETF)定义的一组协议,用于管理系统和网络...

    java_conn_SNMPtrap_send_accept.rar_SNMP_SNMPtrap_snmp java

    2. **SNMPTrap实现**:`利用SNMP4J实现Snmp Trap完整例子.mht`文件详细解释了如何使用SNMP4J发送和接收SNMPTrap。SNMPTrap的发送涉及设置陷阱源、目的地、协议版本、陷阱类型和相关变量绑定;接收则需要配置Trap监听...

    利用SNMP4J实现Snmp Trap完整例子

    利用SNMP4J实现Snmp Trap完整例子 - 企业应用 - Java - JavaEye论坛.mht

    SNMPTrap.exe

    SNMP Trap 接收工具,可以在windows 10 上运行,亲测可用,不需要安装dll,打开即可用。

    Use-SnmpTrap-Tools.rar_SNMPtrap

    1. 发送陷阱:你可以使用 SnmpTrap 工具模拟设备发送陷阱,以便测试 SNMP 管理系统是否能正确接收和处理。 2. 配置陷阱接收器:管理站需要配置为监听特定端口(默认为 UDP 162),并识别来自不同设备的陷阱消息。 3....

    Zabbix - snmp trap监控教程(SNMPTT安装所需软件包)

    SNMPTT是一个用于接收和处理SNMP Trap的工具,它可以将接收到的Trap转换为Zabbix可以理解的格式,然后提交给Zabbix服务器。以下是SNMPTT安装所需的一些关键软件包: 1. **SNMP**: 这是最基础的组件,提供Trap的发送...

    监视通信线路,路由器或交换机SNMP trap的配置

    SNMP trap是一种网络设备主动向网络管理员发送报警信息的方式,常用于监控网络状态和故障检测。 1. **SNMP Trap原理**: SNMP Trap是网络设备在遇到特定事件(如接口状态改变、内存不足等)时,主动向预先设定的...

Global site tag (gtag.js) - Google Analytics