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 完整例子相关推荐

  1. 利用SNMP4J实现Snmp Trap

    下面是两个用于发送和接收Trap报文信息的类: import java.io.IOException; import java.net.UnknownHostException; import jav ...

  2. 使用Zabbix的SNMP trap监控类型监控设备的一个例子

    转载来源 :使用Zabbix的SNMP trap监控类型监控设备的一个例子 :https://www.jianshu.com/p/aa795afdf655 介绍 本文以监控绿盟设备为例. 1.登录被监 ...

  3. 【Zabbix-SNMP trap】使用Zabbix的SNMP trap监控类型监控设备的一个例子

    本文以监控绿盟设备为例. 1.登录被监控的设备的管理系统,配置snmptrap地址指向zabbix服务器或代理服务器. snmptrap地址也叫陷阱. 2.配置或关闭防火墙,并验证是否能在zabbix ...

  4. 浅谈 Linux 系统中的 SNMP Trap 【转】

    文章来源:浅谈 Linux 系统中的 SNMP Trap 简介 本文讲解 SNMP Trap,在介绍 Trap 概念之前,首先认识一下 SNMP 吧. 简单网络管理协议(Simple Network ...

  5. Linux 系统中的 SNMP Trap

    简介 本文讲解 SNMP Trap,在介绍 Trap 概念之前,首先认识一下 SNMP 吧. 简单网络管理协议(Simple Network Management Protocol)是一种应用层协议, ...

  6. Linux 系统中的 SNMP Trap及常用OID

    浅谈 Linux 系统中的 SNMP Trap 转载: http://www.ibm.com/developerworks/cn/linux/l-cn-snmp/ 本文讲解 SNMP Trap,在介绍 ...

  7. SNMP Trap的session问题

    1.前言 最近遇到了个问题,SNMPv3 Trap上报,在snmp agent侧修改了用户密码,管理站mibbroswer上没有修改trap用户的密码,仍然可接收到trap上报消息.通过Wiresha ...

  8. 使用snmp4j实现Snmp功能(三)

    前两篇文章讲了如何使用Snmp4j实现Set.Get(使用snmp4j实现Snmp功能(一))以及发送.接收Trap(使用snmp4j实现Snmp功能(二)) 功能. 在我们前面的实现中,如果访问MI ...

  9. zabbix监控SNMP Trap 类型

    环境 两台虚拟机,一台server(公网IP),一台proxy(内网IP). Docker环境, 使用 docker compose启动. 内网里有一台华为网络设备 目的 通过内网下的proxy接收内 ...

最新文章

  1. CentOS 7下源码编译安装新版本内核
  2. win10解决Mysql net start mysql启动,提示发生系统错误 5 拒绝访问
  3. python函数参数定义不合法_下列哪种函式参数定义不合法?
  4. 品优购dubbox文档bug连环计,还是自己敲最实在!!!!!!
  5. 数据中台实战(八):如何打造可以支撑N条产品线的标签平台
  6. 在ZC702上运行Linux(4)-编译和使用U-Boot Linux
  7. axios vue 加载效果动画_在vue中通过axios异步使用echarts
  8. mac 使用brew卸载安装node
  9. 催人泪下!一个程序员的悲惨故事
  10. 论文浅尝 | emrKBQA: 一个面向临床医疗问答的KBQA数据集
  11. java中的STL库_C++11 STL线程库实现一个简单的线程池
  12. 将代码部署到 GitHub Pages 的快速简易方法
  13. android视频录制、另一部手机实时观看方案
  14. linux find返回数据不一样,Linux学习笔记——find命令
  15. 白鹭引擎egert+PHP后端手游宠物小精灵题材源码
  16. Oracle表空间已满解决方案
  17. 技术丨如何处理有依赖的消息
  18. 利用Python统计微信联系人男女比例以及简单的地区分布
  19. Universal Serial Bus (USB)
  20. 计算机自动化技术论文,自动化技术_计算机技术87884.pdf

热门文章

  1. Mouse Event (Java AWT)
  2. Intellij IDEA 配置
  3. C++11新特性之右值引用
  4. 【BZOJ2813】奇妙的Fibonacci
  5. 关于电商网站购物车功能如何与登录账号相关联的一点想法
  6. Python3连接MySQL
  7. Jzoj5245 Competing Souls
  8. Atcoder 077E - guruguru(线段树+dp)
  9. Struts2实现简单的在线人数统计
  10. ASP基础教程之ASP AdRotator 组件的使用