SNMP4J开发trap监听实例

原创 2007年09月27日 23:06:00
/** *//**
 * 测试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监听和发送消息

MultiThreadedTrapReceiver类:用于接收trap消息   Java代码   package com.snmp.trap;    import java.io...

使用snmp4j监听和发送消息

MultiThreadedTrapReceiver类:用于接收trap消息   Java代码   package com.snmp.trap;    import java.io...

snmp4j 实现 trap监听

snmp4j 实现 trap监听代码可实现基本的trap监听,仅供参考。

snmp4j编程之三 trap监听

原文: Trap监听类: import java.io.IOException; import java.net.UnknownHostException; import java...

使用snmp4j实现get、set、trap

上一篇文章讲了Snmp的一些基本概念,接下来,我们使用Java的开源组件snmp4j来实现一下Snmp里的各种功能。首先是上一篇文章中的那个例子。即通过snmp获取机器名。 snmp4j的jar包可...

使用snmp4j实现trap告警

使用snmp4j实现trap告警 Snmp4j的trap处理的文章在网上看了一些不过都是浅尝辄止,基本都是大概的讲述了一下如何接收trap等简单的技术。但是这些对于企业级的开发往往是不够的,随着纳入...

SNMP4J实现SNMP TRAP

近期项目和华为的接口有要求用SNMP做实时告警的上送,在网上查找了些资料,整理了下 SNMP分为:SNMP TRAP\SNMP GET\SNMP SET      1.SNMP TRAP简单说一般就是...

SNMP 使用SNMP4J V2进行TRAP

SNMP trap(SNMP 陷阱):某种入口,到达该入口会使SNMP被管设备主动通知SNMP管理器,而不是等待SNMP管理器的再次轮询! 在网管系统中,被管理设备中的代理可以在任何时候向网络管理工作...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SNMP4J开发trap监听实例
举报原因:
原因补充:

(最多只允许输入30个字)