利用SNMP4J实现 Snmp Trap 完整例子
来源:互联网 发布:wampserver无法打开php 编辑:程序博客网 时间:2024/06/01 08:38
————————– ———Snmp4J源码和jar包路径——————————
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 的userName private String username1 = "user1"; //认证协议的密码 如MD5 private String authPassword = "password1"; //加密协议密码 如 DES AES private 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 target CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString("public")); target.setAddress(targetAddress); // retry times when commuication error target.setRetries(2); // timeout target.setTimeout(1500); target.setVersion(SnmpConstants.version1); // send pdu, return response return 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 target CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString("public")); target.setAddress(targetAddress); // retry times when commuication error target.setRetries(2); target.setTimeout(1500); target.setVersion(SnmpConstants.version2c); // send pdu, return response return 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 target UserTarget 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 PDU PDU pdu = new ScopedPDU(); pdu.add(new VariableBinding(new OID("1.3.6"))); pdu.setType(PDU.GETNEXT); // send the PDU ResponseEvent 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(); } }
阅读全文
0 0
- 利用SNMP4J实现Snmp Trap完整例子
- 利用SNMP4J实现Snmp Trap完整例子
- 利用SNMP4J实现Snmp Trap完整例子
- 利用SNMP4J实现Snmp Trap完整例子
- 利用SNMP4J实现 Snmp Trap 完整例子
- SNMP4J实现SNMP TRAP
- SNMP4J实现SNMP TRAP
- 利用SNMP4J编写 snmp trap的接收程序实现短信报警
- snmp4j 实现 trap监听
- SNMP 使用SNMP4J V2进行TRAP
- SNMP 使用SNMP4J V2进行TRAP
- SNMP 使用SNMP4J V2进行TRAP
- SNMP 使用SNMP4J V2进行TRAP
- SNMP 使用SNMP4J V2进行TRAP
- SNMP入门--SNMP4J实现SNMP
- 使用snmp4j实现trap告警
- SNMP4j实现Trap的示例
- snmp++ Trap实现
- CGI,FastCGI,PHP-CGI与PHP-FPM
- Unity3D_直线运动
- HDU
- TP框架的介绍和使用
- c++操作符重载左边右边
- 利用SNMP4J实现 Snmp Trap 完整例子
- react (五)Flux小结(内含MVC小知识)
- APP或web测试,尤其要注意数据重复出现的情况
- 如何连接共享打印机
- 别人总结的知识图
- Swift之高级运算符与枚举
- Can't use Subversion command line client: svn Probably the path to Subversion executable is wrong. F
- Linux进入单用户模式改密或修复磁盘
- 简单的linq语法