近期项目和华为的接口有要求用SNMP做实时告警的上送,在网上查找了些资料,整理了下
SNMP分为:SNMP TRAP\SNMP GET\SNMP SET
1.SNMP TRAP简单说一般就是Manager和agent之间拿来传输数据,Manager会一直监听着代理进程发送 TRAP消息
2.SNMP GET看到GET就知道就是从SNMP服务端获取某个节点的数据
3.SNMP SET就是设置SNMP服务端的某个节点的数据
实现SNMPTRAP需SNMP4J JAR包 http://www.snmp4j.org/html/download.html官网下载
1.首先实现SNMP TRAP接收消息服务端,监听Agent发来的TRAP消息
package com.eshore.snmptrap; 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:127.0.0.1/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 = (Vector<VariableBinding>) 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(); } }
2.再写个Agent向服务端发送TRAP消息
package com.eshore.snmptrap; import java.io.IOException; import java.util.Date; 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.Integer32; 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:127.0.0.1/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.4.1.2011.2.15.2.1.2.1.1.1.1"), new OctetString("SNMPTEST"))); pdu.add(new VariableBinding(new OID(".1.3.6.1.4.1.2011.2.15.2.1.2.1.1.1.2"), new Integer32(10))); pdu.add(new VariableBinding(new OID(".1.3.6.1.4.1.2011.2.15.2.1.2.1.1.1.3"), new OctetString(new Date().toString()))); pdu.setType(PDU.TRAP); // 向Agent发送PDU,并接收Response ResponseEvent respEvnt = snmp.send(pdu, target); // 解析Response if (respEvnt != null && respEvnt.getResponse() != null) { Vector<VariableBinding> recVBs = (Vector<VariableBinding>) 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(); } } }
相关推荐
SNMPTrap 的定义 SNMP Trap 是一种异步 Notification 消息,用于在网络设备中报告事件或警报信息。Trap 消息可以由网络设备发送到网络管理站点,以便实时监控和管理网络设备的状态。 SNMP4J 库的使用 SNMP4J 库...
利用SNMP4J实现Snmp Trap完整例子 - 企业应用 - Java - JavaEye论坛.mht
本文将详细讲解如何使用Java的SNMP4J库来实现SNMP Trap接口,发送这些消息。 首先,我们需要了解SNMP4J库。SNMP4J是Java平台上的一个开源SNMP库,它提供了完整的SNMPv1、SNMPv2c和SNMPv3支持。该库不仅包含SNMP协议...
在这个项目中,"用SNMP4J实现的Trap源码"是基于JAVA语言利用SNMP4J库编写的,旨在帮助开发者理解和实践如何通过编程方式实现SNMP Trap的功能。下面将详细解释相关的知识点: 1. **SNMP4J库**:SNMP4J是一个开源的...
2. **SNMPTrap实现**:`利用SNMP4J实现Snmp Trap完整例子.mht`文件详细解释了如何使用SNMP4J发送和接收SNMPTrap。SNMPTrap的发送涉及设置陷阱源、目的地、协议版本、陷阱类型和相关变量绑定;接收则需要配置Trap监听...
本文将详细介绍SNMP实例,特别是通过Java库snmp4j实现的GET、GETNEXT、SET操作以及TRAP发送和MIB获取。 1. **SNMP基本概念** SNMP由三个主要组件构成:管理站(Manager)、代理(Agent)和管理信息库(MIB)。管理...
本文将深入探讨如何使用SNMP4J来实现SNMP的基本操作,包括GET、GETNEXT、SET和TRAP。 1. SNMP协议基础: SNMP协议主要由管理站(Manager)和代理(Agent)两部分组成。管理站负责发送请求并接收响应,而代理则驻留...
SNMP4J是一个Java实现的SNMP协议库,使得Java开发者能够轻松地在应用程序中集成SNMP功能,从而对网络设备进行监控和管理。 SNMP4J.jar是这个库的核心组件,包含了SNMP协议的各种操作所需的类和方法。这个压缩包中的...
SNMP4j是一个Java库,用于实现SNMP协议的客户端功能,如发送Trap、Get、Set请求等。这个压缩包"snmp4j的发送和接收trap.zip"包含了使用SNMP4j进行Trap操作的相关资源。 首先,我们要了解SNMP Trap。在SNMP中,Trap...
**SNMP++实现Trap接收详解** SNMP(Simple Network Management Protocol)是一种广泛应用于网络设备管理的协议,它允许网络管理员远程监控和管理网络设备。在SNMP中,Trap是一种网络设备向管理站发送的被动通知,...
SNMP4J是一个Java实现的简单网络管理协议(SNMP)的应用编程接口(API),它提供了全面的功能,用于开发SNMP应用。SNMP是网络管理领域的重要标准,用于监控和管理网络设备,如路由器、交换机和服务器。下面将详细...
SNMP TRAP是一种机制,网络设备在发生特定事件时会主动发送通知到预设的管理站,这些通知被称为TRAP消息。"SNMP_TRAP监听工具"正是用于接收并处理这些TRAP消息的应用程序。 SNMP TRAP分为多种类型,包括标准陷阱和...
4. 变量绑定列表:包含关于引发Trap事件的具体信息,如受影响的对象的值。 要测试你的trap命令,首先需要确保你的网络设备支持SNMP,并且已经正确配置了SNMP代理。这通常涉及设置社区字符串(用于认证的简单文本...
SNMP4J是一个开源的Java库,专门设计用于实现SNMP协议的客户端功能,使得开发者能够从网络设备中读取或设置管理信息。本篇文章将详细探讨如何使用SNMP4j库在Java中读取SNMP协议数据。 首先,了解SNMP是必要的。SNMP...
4. 启动工具:运行jar文件启动`snmp_trap`服务,开始监听Trap消息。 5. 解析并查看Trap:接收到Trap后,工具会显示事件详情,帮助管理员理解问题所在。 在Linux和Unix环境下使用`snmp_trap`工具: 1. 安装Open SNMP...
SNMP4J是一个Java库,专门用于实现简单网络管理协议(SNMP)的应用程序。SNMP是一种广泛应用于网络设备管理的标准协议,它允许系统管理员远程监控和管理网络设备,如路由器、交换机、服务器等。在Java环境中,SNMP4J...
总的来说,使用snmp4j实现SNMP功能涉及初始化SNMP客户端、设置目标设备、创建和发送PDU,以及处理返回的响应。这个过程可以扩展到更复杂的SNMP操作,包括遍历MIB树、批量GET请求、设置设备属性等。了解这些基础知识...
读取SNMP变量:SNMP4j通过`GetRequest`或`GetNextRequest`实现对网络设备的查询。以下是如何获取特定OID(Object Identifier)的值: ```java PDU pdu = new PDU(); pdu.add(new VariableBinding(new OID("1.3.6.1....
SNMP4J是一个基于Java语言实现的简单网络管理协议(SNMP)的开源库,它为开发者提供了在Java环境中开发SNMP应用的全面支持。SNMP是网络设备管理和监控的标准协议,广泛应用于网络设备配置、性能监控以及故障排查等...