利用SNMP4J实现 Snmp Trap 完整例子
Snmp v1 , v2c, v3 版本发送 Snmp Trap:
package com.snmp.trapServer;import java.io.IOException;import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.PDUv1;
import org.snmp4j.SNMP4JSettings;
import org.snmp4j.ScopedPDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.UserTarget;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.MPv3;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.security.AuthMD5;
import org.snmp4j.security.Priv3DES;
import org.snmp4j.security.PrivDES;
import org.snmp4j.security.SecurityLevel;
import org.snmp4j.security.SecurityModels;
import org.snmp4j.security.SecurityProtocols;
import org.snmp4j.security.USM;
import org.snmp4j.security.UsmUser;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;/** * 本类用于发送Trap信息 * * @author gfw2306* */
public class SnmpTrapSender {private Snmp snmp = null;private Address targetAddress = null;private TransportMapping<UdpAddress> transport = null;//UsmUser 的userNameprivate String username1 = "user1";//认证协议的密码 如MD5private String authPassword = "password1";//加密协议密码 如 DES AESprivate String privPassword = "password2";public static void main(String[] args) {SnmpTrapSender poc = new SnmpTrapSender();try {poc.init();poc.sendV1Trap();poc.sendV2cTrap();poc.sendV3TrapNoAuthNoPriv();//poc.sendV3Auth();poc.sendV3();} catch (IOException e) {e.printStackTrace();}}public void init() throws IOException {//目标主机的ip地址 和 端口号targetAddress = GenericAddress.parse("udp:10.195.88.96/162");transport = new DefaultUdpTransportMapping();snmp = new Snmp(transport);transport.listen();}/*** Snmp V1 测试发送Trap* @return* @throws IOException*/public ResponseEvent sendV1Trap() throws IOException {PDUv1 pdu = new PDUv1();VariableBinding v = new VariableBinding();v.setOid(SnmpConstants.sysName);v.setVariable(new OctetString("Snmp Trap V1 Test"));pdu.add(v);pdu.setType(PDU.V1TRAP);// set targetCommunityTarget target = new CommunityTarget();target.setCommunity(new OctetString("public"));target.setAddress(targetAddress);// retry times when commuication errortarget.setRetries(2);// timeouttarget.setTimeout(1500);target.setVersion(SnmpConstants.version1);// send pdu, return responsereturn snmp.send(pdu, target);}/*** Snmp V2c 测试发送Trap* @return* @throws IOException*/public ResponseEvent sendV2cTrap() throws IOException {PDU pdu = new PDU();VariableBinding v = new VariableBinding();v.setOid(SnmpConstants.sysName);v.setVariable(new OctetString("Snmp Trap V2 Test"));pdu.add(v);pdu.setType(PDU.TRAP);// set targetCommunityTarget target = new CommunityTarget();target.setCommunity(new OctetString("public"));target.setAddress(targetAddress);// retry times when commuication errortarget.setRetries(2);target.setTimeout(1500);target.setVersion(SnmpConstants.version2c);// send pdu, return responsereturn snmp.send(pdu, target);}/*** SnmpV3 不带认证加密协议.* @return* @throws IOException*/public ResponseEvent sendV3TrapNoAuthNoPriv() throws IOException {SNMP4JSettings.setExtensibilityEnabled(true);SecurityProtocols.getInstance().addDefaultProtocols();UserTarget target = new UserTarget();target.setVersion(SnmpConstants.version3);try {transport = new DefaultUdpTransportMapping();} catch (IOException e1) {e1.printStackTrace();}byte[] enginId = "TEO_ID".getBytes();USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(enginId), 500);SecurityModels secModels = SecurityModels.getInstance();if (snmp.getUSM() == null) {secModels.addSecurityModel(usm);}target.setSecurityLevel(SecurityLevel.NOAUTH_NOPRIV);target.setAddress(targetAddress);ScopedPDU pdu = new ScopedPDU();pdu.setType(PDU.NOTIFICATION);VariableBinding v = new VariableBinding();v.setOid(SnmpConstants.sysName);v.setVariable(new OctetString("Snmp Trap V3 Test sendV3TrapNoAuthNoPriv"));pdu.add(v);snmp.setLocalEngine(enginId, 500, 1);return snmp.send(pdu, target);}/*** 目前不可以被接收* @return* @throws IOException*/public ResponseEvent sendV3Auth() throws IOException {SNMP4JSettings.setExtensibilityEnabled(true);SecurityProtocols.getInstance().addDefaultProtocols();UserTarget target = new UserTarget();target.setSecurityName(new OctetString(username1));target.setVersion(SnmpConstants.version3);try {transport = new DefaultUdpTransportMapping();} catch (IOException e1) {e1.printStackTrace();}byte[] enginId = "TEO_ID".getBytes();USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(enginId), 500);SecurityModels secModels = SecurityModels.getInstance();synchronized (secModels) {if (snmp.getUSM() == null) {secModels.addSecurityModel(usm);}snmp.getUSM().addUser(new OctetString(username1),new OctetString(enginId),new UsmUser(new OctetString(username1), AuthMD5.ID,new OctetString(authPassword), Priv3DES.ID,new OctetString(privPassword)));target.setSecurityLevel(SecurityLevel.AUTH_PRIV);target.setAddress(targetAddress);ScopedPDU pdu = new ScopedPDU();pdu.setType(PDU.NOTIFICATION);VariableBinding v = new VariableBinding();v.setOid(SnmpConstants.sysName);v.setVariable(new OctetString("Snmp Trap V3 Test sendV3Auth"));pdu.add(v);snmp.setLocalEngine(enginId, 500, 1);ResponseEvent send = snmp.send(pdu, target);//System.out.println(send.getError());return send;}}/*** 测试SnmpV3 带认证协议,加密协议* @return* @throws IOException*/public ResponseEvent sendV3() throws IOException{OctetString userName = new OctetString(username1);OctetString authPass = new OctetString(authPassword);OctetString privPass = new OctetString("privPassword");TransportMapping<?> transport; transport = new DefaultUdpTransportMapping();Snmp snmp = new Snmp(transport);//MPv3.setEnterpriseID(35904);USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 500); SecurityModels.getInstance().addSecurityModel(usm); UserTarget target = new UserTarget();byte[] enginId = "TEO_ID".getBytes();SecurityModels secModels = SecurityModels.getInstance();synchronized (secModels) {if (snmp.getUSM() == null) {secModels.addSecurityModel(usm);}/*snmp.getUSM().addUser(new OctetString(username),new OctetString(enginId),new UsmUser(new OctetString(username), AuthMD5.ID,new OctetString(authPassword), Priv3DES.ID,new OctetString(privPassword)));*/// add user to the USM snmp.getUSM().addUser(userName,new UsmUser(userName,AuthMD5.ID,authPass,PrivDES.ID,privPass));target.setAddress(targetAddress); target.setRetries(2); target.setTimeout(3000); target.setVersion(SnmpConstants.version3); target.setSecurityLevel(SecurityLevel.AUTH_NOPRIV); target.setSecurityName(userName); ScopedPDU pdu = new ScopedPDU();pdu.setType(PDU.NOTIFICATION);VariableBinding v = new VariableBinding();v.setOid(SnmpConstants.sysName);v.setVariable(new OctetString("Snmp Trap V3 Test sendV3Auth----------"));pdu.add(v);snmp.setLocalEngine(enginId, 500, 1);ResponseEvent send = snmp.send(pdu, target);//System.out.println(send.getError());return send;}}/*public void sendV3() throws IOException {snmp.getUSM().addUser(new OctetString("MD5DES"),new UsmUser(new OctetString("MD5DES"), AuthMD5.ID,new OctetString("MD5DESUserAuthPassword"), PrivDES.ID,new OctetString("MD5DESUserPrivPassword")));// create the targetUserTarget target = new UserTarget();target.setAddress(targetAddress);target.setRetries(1);target.setTimeout(5000);target.setVersion(SnmpConstants.version3);target.setSecurityLevel(SecurityLevel.AUTH_PRIV);target.setSecurityName(new OctetString("MD5DES"));// create the PDUPDU pdu = new ScopedPDU();pdu.add(new VariableBinding(new OID("1.3.6")));pdu.setType(PDU.GETNEXT);// send the PDUResponseEvent response = snmp.send(pdu, target);// extract the response PDU (could be null if timed out)PDU responsePDU = response.getResponse();// extract the address used by the agent to send the response:Address peerAddress = response.getPeerAddress();}*/}
Snmp v1 , v2c, v3 版本接收 Snmp Trap消息:
package com.snmp.trapServer;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.AuthMD5;
import org.snmp4j.security.PrivDES;
import org.snmp4j.security.SecurityModels;
import org.snmp4j.security.SecurityProtocols;
import org.snmp4j.security.USM;
import org.snmp4j.security.UsmUser;
import org.snmp4j.security.UsmUserEntry;
import org.snmp4j.security.UsmUserTable;
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 gfw2306* */
public class MultiThreadedTrapReceiver implements CommandResponder { private String username1 = "user1";private String username2 = "user2";private String username3 = "user3";private String username4 = "user4";private String authPassword = "password1";private String privPassword = "password2";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:10.195.88.96/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()); UsmUser usmUser = new UsmUser(new OctetString(username), AuthMD5.ID,new OctetString(authPassword), Priv3DES.ID,new OctetString(privPassword));USM usm = new USM(SecurityProtocols.getInstance().addDefaultProtocols(), new OctetString(MPv3 .createLocalEngineID()), 0); usm.addUser(usmUser);SecurityModels.getInstance().addSecurityModel(usm); snmp.listen(); //add the enginID in the trap //OctetString engineID = new OctetString(MPv3.createLocalEngineID()); byte[] enginId = "TEO_ID".getBytes();OctetString engineID = new OctetString(enginId);//create and add the userSecurityModel USM usm = new USM(SecurityProtocols.getInstance(),engineID, 0); SecurityModels.getInstance().addSecurityModel(usm); //add the securityProtocols,you can skip it if your users are noAuthNoPriv SecurityProtocols.getInstance().addDefaultProtocols(); //create and add the user UsmUser usmUser = new UsmUser(new OctetString(username), AuthMD5.ID,new OctetString(authPassword), Priv3DES.ID,new OctetString(privPassword)); usm.addUser(usmUser);//snmp.getUSM().addUser(usmUser); snmp.listen(); *//*******************************************使用处*************************************************///创建接收SnmpTrap的线程池,参数: 线程名称及线程数threadPool = ThreadPool.create("Trap", 2); dispatcher = new MultiThreadedMessageDispatcher(threadPool, new MessageDispatcherImpl()); //监听端的 ip地址 和 监听端口号listenAddress = GenericAddress.parse(System.getProperty( "snmp4j.listenAddress", "udp:10.195.88.96/162"));TransportMapping<?> transport; 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());//MPv3.setEnterpriseID(35904);snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3()); USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3 .createLocalEngineID()),0);SecurityModels.getInstance().addSecurityModel(usm);// 添加安全协议,如果没有发过来的消息没有身份认证,可以跳过此段代码SecurityProtocols.getInstance().addDefaultProtocols();// 创建和添加用户OctetString userName1 = new OctetString(username1);OctetString userName2 = new OctetString(username2);//OctetString userName3 = new OctetString(username3);//OctetString userName4 = new OctetString(username4);OctetString authPass = new OctetString(authPassword);OctetString privPass = new OctetString("privPassword");UsmUser usmUser1 = new UsmUser(userName1, AuthMD5.ID, authPass, PrivDES.ID, privPass);UsmUser usmUser2 = new UsmUser(userName2, AuthMD5.ID, authPass, PrivDES.ID, privPass);//UsmUser usmUser3 = new UsmUser(userName3, AuthMD5.ID, authPass, PrivDES.ID, privPass);//UsmUser usmUser4 = new UsmUser(userName4, AuthMD5.ID, authPass, PrivDES.ID, privPass);//因为接受的Trap可能来自不同的主机,主机的Snmp v3加密认证密码都不一样,所以根据加密的名称,来添加认证信息UsmUser。//添加了加密认证信息的便可以接收来自发送端的信息。UsmUserEntry userEnty1 = new UsmUserEntry(userName1,usmUser1);UsmUserEntry userEnty2 = new UsmUserEntry(userName2,usmUser2);//UsmUserEntry userEnty3 = new UsmUserEntry(userName3,usmUser3);//UsmUserEntry userEnty4 = new UsmUserEntry(userName4,usmUser4);UsmUserTable userTable = snmp.getUSM().getUserTable();// 添加其他用户userTable.addUser(userEnty1);userTable.addUser(userEnty2);//开启Snmp监听,可以接收来自Trap端的信息。snmp.listen(); /* UsmUserTable userTable = snmp.getUSM().getUserTable();userTable.addUser(userEnty1);userTable.addUser(userEnty2);*//********************************************************************************************/} 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) { @SuppressWarnings("unchecked")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()); } } } //开启监控的main方法。public static void main(String[] args) { MultiThreadedTrapReceiver multithreadedtrapreceiver = new MultiThreadedTrapReceiver(); multithreadedtrapreceiver.run(); }
}
转载自https://blog.csdn.net/gaohaicheng123/article/details/77962213
利用SNMP4J实现 Snmp Trap 完整例子相关推荐
- 利用SNMP4J实现Snmp Trap
下面是两个用于发送和接收Trap报文信息的类: import java.io.IOException; import java.net.UnknownHostException; import jav ...
- 使用Zabbix的SNMP trap监控类型监控设备的一个例子
转载来源 :使用Zabbix的SNMP trap监控类型监控设备的一个例子 :https://www.jianshu.com/p/aa795afdf655 介绍 本文以监控绿盟设备为例. 1.登录被监 ...
- 【Zabbix-SNMP trap】使用Zabbix的SNMP trap监控类型监控设备的一个例子
本文以监控绿盟设备为例. 1.登录被监控的设备的管理系统,配置snmptrap地址指向zabbix服务器或代理服务器. snmptrap地址也叫陷阱. 2.配置或关闭防火墙,并验证是否能在zabbix ...
- 浅谈 Linux 系统中的 SNMP Trap 【转】
文章来源:浅谈 Linux 系统中的 SNMP Trap 简介 本文讲解 SNMP Trap,在介绍 Trap 概念之前,首先认识一下 SNMP 吧. 简单网络管理协议(Simple Network ...
- Linux 系统中的 SNMP Trap
简介 本文讲解 SNMP Trap,在介绍 Trap 概念之前,首先认识一下 SNMP 吧. 简单网络管理协议(Simple Network Management Protocol)是一种应用层协议, ...
- Linux 系统中的 SNMP Trap及常用OID
浅谈 Linux 系统中的 SNMP Trap 转载: http://www.ibm.com/developerworks/cn/linux/l-cn-snmp/ 本文讲解 SNMP Trap,在介绍 ...
- SNMP Trap的session问题
1.前言 最近遇到了个问题,SNMPv3 Trap上报,在snmp agent侧修改了用户密码,管理站mibbroswer上没有修改trap用户的密码,仍然可接收到trap上报消息.通过Wiresha ...
- 使用snmp4j实现Snmp功能(三)
前两篇文章讲了如何使用Snmp4j实现Set.Get(使用snmp4j实现Snmp功能(一))以及发送.接收Trap(使用snmp4j实现Snmp功能(二)) 功能. 在我们前面的实现中,如果访问MI ...
- zabbix监控SNMP Trap 类型
环境 两台虚拟机,一台server(公网IP),一台proxy(内网IP). Docker环境, 使用 docker compose启动. 内网里有一台华为网络设备 目的 通过内网下的proxy接收内 ...
最新文章
- CentOS 7下源码编译安装新版本内核
- win10解决Mysql net start mysql启动,提示发生系统错误 5 拒绝访问
- python函数参数定义不合法_下列哪种函式参数定义不合法?
- 品优购dubbox文档bug连环计,还是自己敲最实在!!!!!!
- 数据中台实战(八):如何打造可以支撑N条产品线的标签平台
- 在ZC702上运行Linux(4)-编译和使用U-Boot Linux
- axios vue 加载效果动画_在vue中通过axios异步使用echarts
- mac 使用brew卸载安装node
- 催人泪下!一个程序员的悲惨故事
- 论文浅尝 | emrKBQA: 一个面向临床医疗问答的KBQA数据集
- java中的STL库_C++11 STL线程库实现一个简单的线程池
- 将代码部署到 GitHub Pages 的快速简易方法
- android视频录制、另一部手机实时观看方案
- linux find返回数据不一样,Linux学习笔记——find命令
- 白鹭引擎egert+PHP后端手游宠物小精灵题材源码
- Oracle表空间已满解决方案
- 技术丨如何处理有依赖的消息
- 利用Python统计微信联系人男女比例以及简单的地区分布
- Universal Serial Bus (USB)
- 计算机自动化技术论文,自动化技术_计算机技术87884.pdf