`
yuhuizheng527
  • 浏览: 2085 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

SNMP4J实现Snmp Trap

阅读更多
利用SNMP4J实现Snmp Trap完整例子

:
import java.io.IOException;  
import java.net.UnknownHostException;  
import java.util.Vector;  
 
import org.snmp4j.CommandResponder;  
import org.snmp4j.CommandResponderEvent;  
import org.snmp4j.MessageDispatcherImpl;  
import org.snmp4j.Snmp;  
import org.snmp4j.TransportMapping;  
import org.snmp4j.mp.MPv1;  
import org.snmp4j.mp.MPv2c;  
import org.snmp4j.mp.MPv3;  
import org.snmp4j.security.SecurityModels;  
import org.snmp4j.security.SecurityProtocols;  
import org.snmp4j.security.USM;  
import org.snmp4j.smi.Address;  
import org.snmp4j.smi.GenericAddress;  
import org.snmp4j.smi.OctetString;  
import org.snmp4j.smi.TcpAddress;  
import org.snmp4j.smi.UdpAddress;  
import org.snmp4j.smi.VariableBinding;  
import org.snmp4j.transport.DefaultTcpTransportMapping;  
import org.snmp4j.transport.DefaultUdpTransportMapping;  
import org.snmp4j.util.MultiThreadedMessageDispatcher;  
import org.snmp4j.util.ThreadPool;  
 
/** 
* 本类用于监听代理进程的Trap信息 
*  
* @author zhanjia 

*/ 
public class MultiThreadedTrapReceiver implements CommandResponder {  
 
    private MultiThreadedMessageDispatcher dispatcher;  
    private Snmp snmp = null;  
    private Address listenAddress;  
    private ThreadPool threadPool;  
 
    public MultiThreadedTrapReceiver() {  
        // BasicConfigurator.configure();  
    }  
 
    private void init() throws UnknownHostException, IOException {  
        threadPool = ThreadPool.create("Trap", 2);  
        dispatcher = new MultiThreadedMessageDispatcher(threadPool,  
                new MessageDispatcherImpl());  
        listenAddress = GenericAddress.parse(System.getProperty(  
                "snmp4j.listenAddress", "udp:192.168.1.23/162")); // 本地IP与监听端口  
        TransportMapping transport;  
        // 对TCP与UDP协议进行处理  
        if (listenAddress instanceof UdpAddress) {  
            transport = new DefaultUdpTransportMapping(  
                    (UdpAddress) listenAddress);  
        } else {  
            transport = new DefaultTcpTransportMapping(  
                    (TcpAddress) listenAddress);  
        }  
        snmp = new Snmp(dispatcher, transport);  
        snmp.getMessageDispatcher().addMessageProcessingModel(new MPv1());  
        snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c());  
        snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3());  
        USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3  
                .createLocalEngineID()), 0);  
        SecurityModels.getInstance().addSecurityModel(usm);  
        snmp.listen();  
    }  
 
      
    public void run() {  
        try {  
            init();  
            snmp.addCommandResponder(this);  
            System.out.println("开始监听Trap信息!");  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
    }  
 
    /** 
     * 实现CommandResponder的processPdu方法, 用于处理传入的请求、PDU等信息 
     * 当接收到trap时,会自动进入这个方法 
     *  
     * @param respEvnt 
     */ 
    public void processPdu(CommandResponderEvent respEvnt) {  
        // 解析Response  
        if (respEvnt != null && respEvnt.getPDU() != null) {  
            Vector<VariableBinding> recVBs = respEvnt.getPDU().getVariableBindings();  
            for (int i = 0; i < recVBs.size(); i++) {  
                VariableBinding recVB = recVBs.elementAt(i);  
                System.out.println(recVB.getOid() + " : " + recVB.getVariable());  
            }  
        }  
    }  
 
    public static void main(String[] args) {  
        MultiThreadedTrapReceiver multithreadedtrapreceiver = new MultiThreadedTrapReceiver();  
        multithreadedtrapreceiver.run();  
    }  
 

Coder:

import java.io.IOException;  
import java.util.Vector;  
 
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.VariableBinding;  
import org.snmp4j.transport.DefaultUdpTransportMapping;  
 
/** 
* 本类用于向管理进程发送Trap信息 
*  
* @author zhanjia 

*/ 
public class SnmpUtilSendTrap {  
 
    private Snmp snmp = null;  
 
    private Address targetAddress = null;  
 
    public void initComm() throws IOException {  
 
        // 设置管理进程的IP和端口  
        targetAddress = GenericAddress.parse("udp:192.168.1.23/162");  
        TransportMapping transport = new DefaultUdpTransportMapping();  
        snmp = new Snmp(transport);  
        transport.listen();  
 
    }  
 
    /** 
     * 向管理进程发送Trap报文 
     *  
     * @throws IOException 
     */ 
    public void sendPDU() throws IOException {  
 
        // 设置 target  
        CommunityTarget target = new CommunityTarget();  
        target.setAddress(targetAddress);  
 
        // 通信不成功时的重试次数  
        target.setRetries(2);  
        // 超时时间  
        target.setTimeout(1500);  
        // snmp版本  
        target.setVersion(SnmpConstants.version2c);  
 
        // 创建 PDU  
        PDU pdu = new PDU();  
        pdu.add(new VariableBinding(new OID(".1.3.6.1.2.3377.10.1.1.1.1"),  
                new OctetString("SnmpTrap")));  
        pdu.add(new VariableBinding(new OID(".1.3.6.1.2.3377.10.1.1.1.2"),  
                new OctetString("JavaEE")));  
        pdu.setType(PDU.TRAP);  
 
        // 向Agent发送PDU,并接收Response  
        ResponseEvent respEvnt = snmp.send(pdu, target);  
 
        // 解析Response  
        if (respEvnt != null && respEvnt.getResponse() != null) {  
            Vector<VariableBinding> recVBs = respEvnt.getResponse()  
            .getVariableBindings();  
            for (int i = 0; i < recVBs.size(); i++) {  
                VariableBinding recVB = recVBs.elementAt(i);  
                System.out.println(recVB.getOid() + " : " + recVB.getVariable());  
            }  
        }  
    }  
 
    public static void main(String[] args) {  
        try {  
            SnmpUtilSendTrap util = new SnmpUtilSendTrap();  
            util.initComm();  
            util.sendPDU();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
 

1、运行MultiThreadedTrapReceiver类,提示“开始监听Trap信息!”并处理监听状态

2、运行SnmpUtilSendTrap类,运行完毕后,将会在“开始监听Trap信息!”后面显示:

1.3.6.1.2.3377.10.1.1.1.1 : SnmpTrap
1.3.6.1.2.3377.10.1.1.1.2 : JavaEE

MultiThreadedTrapReceiver输出面板中显示以上两行即表示测试成功!
分享到:
评论

相关推荐

    snmp4j实现snmp trap 发送与接收

    SNMPTrap 的定义 SNMP Trap 是一种异步 Notification 消息,用于在网络设备中报告事件或警报信息。Trap 消息可以由网络设备发送到网络管理站点,以便实时监控和管理网络设备的状态。 SNMP4J 库的使用 SNMP4J 库...

    利用SNMP4J实现Snmp Trap完整例子

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

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

    本文将详细讲解如何使用Java的SNMP4J库来实现SNMP Trap接口,发送这些消息。 首先,我们需要了解SNMP4J库。SNMP4J是Java平台上的一个开源SNMP库,它提供了完整的SNMPv1、SNMPv2c和SNMPv3支持。该库不仅包含SNMP协议...

    用SNMP4J实现的Trap源码

    在这个项目中,"用SNMP4J实现的Trap源码"是基于JAVA语言利用SNMP4J库编写的,旨在帮助开发者理解和实践如何通过编程方式实现SNMP Trap的功能。下面将详细解释相关的知识点: 1. **SNMP4J库**:SNMP4J是一个开源的...

    java_conn_SNMPtrap_send_accept.rar_SNMP_SNMPtrap_snmp java

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

    SNMP实例大全--snmp4j(get ,trap,set,取mib)

    本文将详细介绍SNMP实例,特别是通过Java库snmp4j实现的GET、GETNEXT、SET操作以及TRAP发送和MIB获取。 1. **SNMP基本概念** SNMP由三个主要组件构成:管理站(Manager)、代理(Agent)和管理信息库(MIB)。管理...

    基于SNMP4J的SNMP操作实现代码

    本文将深入探讨如何使用SNMP4J来实现SNMP的基本操作,包括GET、GETNEXT、SET和TRAP。 1. SNMP协议基础: SNMP协议主要由管理站(Manager)和代理(Agent)两部分组成。管理站负责发送请求并接收响应,而代理则驻留...

    snmp4j.rar_SNMP_SNMP4J.jar_snmp4j的jar包_网络设备监控

    SNMP4J是一个Java实现的SNMP协议库,使得Java开发者能够轻松地在应用程序中集成SNMP功能,从而对网络设备进行监控和管理。 SNMP4J.jar是这个库的核心组件,包含了SNMP协议的各种操作所需的类和方法。这个压缩包中的...

    snmp4j的发送和接收trap.zip

    SNMP4j是一个Java库,用于实现SNMP协议的客户端功能,如发送Trap、Get、Set请求等。这个压缩包"snmp4j的发送和接收trap.zip"包含了使用SNMP4j进行Trap操作的相关资源。 首先,我们要了解SNMP Trap。在SNMP中,Trap...

    snmp++实现Trap接收

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

    snmp4j源码和API

    SNMP4J是一个Java实现的简单网络管理协议(SNMP)的应用编程接口(API),它提供了全面的功能,用于开发SNMP应用。SNMP是网络管理领域的重要标准,用于监控和管理网络设备,如路由器、交换机和服务器。下面将详细...

    SNMP_TRAP监听工具

    SNMP TRAP是一种机制,网络设备在发生特定事件时会主动发送通知到预设的管理站,这些通知被称为TRAP消息。"SNMP_TRAP监听工具"正是用于接收并处理这些TRAP消息的应用程序。 SNMP TRAP分为多种类型,包括标准陷阱和...

    snmp trap命令接收软件

    4. 变量绑定列表:包含关于引发Trap事件的具体信息,如受影响的对象的值。 要测试你的trap命令,首先需要确保你的网络设备支持SNMP,并且已经正确配置了SNMP代理。这通常涉及设置社区字符串(用于认证的简单文本...

    java利用snmp4j包来读取snmp协议数据

    SNMP4J是一个开源的Java库,专门设计用于实现SNMP协议的客户端功能,使得开发者能够从网络设备中读取或设置管理信息。本篇文章将详细探讨如何使用SNMP4j库在Java中读取SNMP协议数据。 首先,了解SNMP是必要的。SNMP...

    snmp_trap 协议接收工具

    4. 启动工具:运行jar文件启动`snmp_trap`服务,开始监听Trap消息。 5. 解析并查看Trap:接收到Trap后,工具会显示事件详情,帮助管理员理解问题所在。 在Linux和Unix环境下使用`snmp_trap`工具: 1. 安装Open SNMP...

    snmp4j.zip_java使用snmp4j_snmp4j_snmp4j java

    SNMP4J是一个Java库,专门用于实现简单网络管理协议(SNMP)的应用程序。SNMP是一种广泛应用于网络设备管理的标准协议,它允许系统管理员远程监控和管理网络设备,如路由器、交换机、服务器等。在Java环境中,SNMP4J...

    使用snmp4j实现Snmp功能

    总的来说,使用snmp4j实现SNMP功能涉及初始化SNMP客户端、设置目标设备、创建和发送PDU,以及处理返回的响应。这个过程可以扩展到更复杂的SNMP操作,包括遍历MIB树、批量GET请求、设置设备属性等。了解这些基础知识...

    snmp4j包来读取snmp协议数据

    读取SNMP变量:SNMP4j通过`GetRequest`或`GetNextRequest`实现对网络设备的查询。以下是如何获取特定OID(Object Identifier)的值: ```java PDU pdu = new PDU(); pdu.add(new VariableBinding(new OID("1.3.6.1....

    snmp4j的jar包

    SNMP4J是一个基于Java语言实现的简单网络管理协议(SNMP)的开源库,它为开发者提供了在Java环境中开发SNMP应用的全面支持。SNMP是网络设备管理和监控的标准协议,广泛应用于网络设备配置、性能监控以及故障排查等...

Global site tag (gtag.js) - Google Analytics