snmp4j 实现 trap监听
来源:互联网 发布:锐捷交换机查mac 编辑:程序博客网 时间:2024/06/05 16:44
snmp4j 实现 trap监听
以下代码可实现基本的trap监听,仅供参考。
监听器
package top.leiax00.snmp;import org.snmp4j.*;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.*;import org.snmp4j.transport.DefaultTcpTransportMapping;import org.snmp4j.transport.DefaultUdpTransportMapping;import org.snmp4j.util.MultiThreadedMessageDispatcher;import org.snmp4j.util.ThreadPool;import java.io.IOException;import java.net.UnknownHostException;import java.util.Vector;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<? extends 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(); }}
发送trap
package top.leiax00.snmp;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信息 * */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.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<? extends 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(); } }}
阅读全文
0 0
- snmp4j 实现 trap监听
- SNMP4J实现SNMP TRAP
- SNMP4J实现SNMP TRAP
- SNMP4J开发trap监听实例
- 使用snmp4j实现trap告警
- SNMP4j实现Trap的示例
- snmp4j编程之三 trap监听
- 利用SNMP4J实现Snmp Trap完整例子
- 利用SNMP4J实现Snmp Trap完整例子
- 利用SNMP4J实现Snmp Trap完整例子
- 利用SNMP4J实现Snmp Trap完整例子
- 使用snmp4j实现get、set、trap
- 利用SNMP4J实现 Snmp Trap 完整例子
- snmp4j sends v3 trap
- 利用SNMP4J编写 snmp trap的接收程序实现短信报警
- SNMP 使用SNMP4J V2进行TRAP
- SNMP 使用SNMP4J V2进行TRAP
- SNMP 使用SNMP4J V2进行TRAP
- 太坑了,EASYUI的tree图标显示竟然与CSS引入顺序有关系
- Apache开启GZIP压缩
- SQL编程--类型属性unsigned
- Remmina – 功能丰富的用于Linux的远程桌面共享工具
- hdu2040 亲和数(C语言)
- snmp4j 实现 trap监听
- 随便乱写的感想
- 关于数据标准化,归一化,正则化
- eclipse常用快捷键总结
- jar学习笔记
- 线程安全和可重入函数
- 在阿里云上搭建hadoop
- java 基础类 个人积累
- 算法铺子之排序---快速排序(一)