打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于用snmpv3开发网管系统
Java代码
  1. package com.medou.agent;   
  2. import org.snmp4j.*;   
  3. import org.snmp4j.mp.*;   
  4. import org.snmp4j.security.AuthMD5;   
  5. import org.snmp4j.security.AuthSHA;   
  6. import org.snmp4j.security.PrivAES128;   
  7. import org.snmp4j.security.PrivAES192;   
  8. import org.snmp4j.security.PrivAES256;   
  9. import org.snmp4j.security.PrivDES;   
  10. import org.snmp4j.security.SecurityModels;   
  11. import org.snmp4j.security.SecurityProtocols;   
  12. import org.snmp4j.security.USM;   
  13. import org.snmp4j.security.UsmUser;   
  14. import org.snmp4j.smi.*;   
  15. import org.snmp4j.transport.DefaultTcpTransportMapping;   
  16. import org.snmp4j.transport.DefaultUdpTransportMapping;   
  17. import org.snmp4j.util.MultiThreadedMessageDispatcher;   
  18. import org.snmp4j.util.ThreadPool;   
  19.   
  20. public class SnmpProcessor implements CommandResponder {   
  21.     private MultiThreadedMessageDispatcher dispatcher;   
  22.     private Address listenAddress;   
  23.     private ThreadPool threadPool;   
  24.     private OID authProtocol;   
  25.     private OID privProtocol;   
  26.     private OctetString privPassphrase;   
  27.     private OctetString authPassphrase;   
  28.     private OctetString securityName = new OctetString();   
  29.     private int numDispatcherThreads = 2;   
  30.     private int version;   
  31.     private String host;   
  32.        
  33.     public SnmpProcessor(String host, String user,    
  34.               String authProtocol, String authPasshrase, String privProtocol,    
  35.               String privPassphrase, int version) {   
  36.           this.authPassphrase = new OctetString(authPasshrase);   
  37.           this.securityName = new OctetString(user);   
  38.           this.privPassphrase = new OctetString(privPassphrase);   
  39.           this.version = version;   
  40.           this.host = host;   
  41.           if (authProtocol.equals("MD5")) {   
  42.               this.authProtocol = AuthMD5.ID;   
  43.           } else if (authProtocol.equals("SHA")) {   
  44.               this.authProtocol = AuthSHA.ID;   
  45.           }   
  46.           if (privProtocol.equals("DES")) {   
  47.               this.privProtocol = PrivDES.ID;   
  48.           } else if ((privProtocol.equals("AES128"))   
  49.                   || (privProtocol.equals("AES"))) {   
  50.               this.privProtocol = PrivAES128.ID;   
  51.           } else if (privProtocol.equals("AES192")) {   
  52.               this.privProtocol = PrivAES192.ID;   
  53.           } else if (privProtocol.equals("AES256")) {   
  54.               this.privProtocol = PrivAES256.ID;   
  55.           }   
  56.     }   
  57.        
  58.     public synchronized void run() {   
  59.         try {   
  60.             init();   
  61.         } catch (Exception ex) {   
  62.             ex.printStackTrace();   
  63.         }    
  64.     }   
  65.   
  66.     public synchronized void init() throws Exception {   
  67.         try {   
  68.             threadPool = ThreadPool.create("Trap", numDispatcherThreads);   
  69.             dispatcher = new MultiThreadedMessageDispatcher(threadPool, new MessageDispatcherImpl());   
  70.             listenAddress = GenericAddress.parse(host);   
  71.             TransportMapping transport;   
  72.             if (listenAddress instanceof UdpAddress) {   
  73.               transport = new DefaultUdpTransportMapping((UdpAddress)listenAddress);   
  74.             } else {   
  75.               transport = new DefaultTcpTransportMapping((TcpAddress)listenAddress);   
  76.             }   
  77.             dispatcher.addMessageProcessingModel(new MPv1());   
  78.             dispatcher.addMessageProcessingModel(new MPv2c());   
  79.             dispatcher.addMessageProcessingModel(new MPv3());   
  80.             SecurityProtocols.getInstance().addDefaultProtocols();   
  81.             Snmp snmp = new Snmp(dispatcher, transport);   
  82.             if (version == SnmpConstants.version3) {   
  83.                 USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);   
  84.                 SecurityModels.getInstance().addSecurityModel(usm);   
  85.                 // Add the configured user to the USM   
  86.                 addUsmUser(snmp);   
  87.             }   
  88.             snmp.addCommandResponder(this);   
  89.             transport.listen();   
  90.         } catch (Exception ex) {   
  91.             ex.printStackTrace();   
  92.         }   
  93.     }   
  94.        
  95.     private void addUsmUser(Snmp snmp) {   
  96.         snmp.getUSM().addUser(securityName, new UsmUser(securityName,   
  97.                                                         authProtocol,   
  98.                                                         authPassphrase,   
  99.                                                         privProtocol,   
  100.                                                         privPassphrase));   
  101.     }   
  102.        
  103.     public String getResponse (String cmdType, String oid, String value) {   
  104.         return "lkj";   
  105.     }   
  106.        
  107. @SuppressWarnings("unchecked")   
  108. public synchronized void processPdu(CommandResponderEvent aEvent) {   
  109.       PDU pdu = aEvent.getPDU();   
  110.       if (pdu == null) {   
  111.           return;   
  112.       }    
  113.       String cmdType = "";   
  114.       OID oid = pdu.get(0).getOid();   
  115.       String oidStr = oid.toString();   
  116.       System.out.println(oidStr);   
  117.       String value = null==pdu.get(0).getVariable().toString()?"":pdu.get(0).getVariable().toString();   
  118.       System.out.println(value);   
  119.       switch (pdu.getType()) {   
  120.           case PDU.GET:   
  121.               cmdType = "0";   
  122.               break;   
  123.           case PDU.GETNEXT:   
  124.               cmdType = "1";   
  125.               break;   
  126.           case PDU.SET:   
  127.               cmdType = "3";   
  128.               break;   
  129.           default:   
  130.               break;   
  131.       }   
  132.       StatusInformation statusInformation = new StatusInformation();   
  133.       StateReference stateRef = aEvent.getStateReference();   
  134.       try {   
  135.           pdu.setType(PDU.RESPONSE);   
  136.           String response = getResponse(cmdType, oidStr, value);   
  137.           Variable rariable = null;   
  138.           rariable = new OctetString(response);   
  139.           pdu.set(0new VariableBinding(oid, rariable));   
  140.           aEvent.getMessageDispatcher().returnResponsePdu(   
  141.               aEvent.getMessageProcessingModel(),   
  142.               aEvent.getSecurityModel(), aEvent.getSecurityName(),   
  143.               aEvent.getSecurityLevel(), pdu,   
  144.               aEvent.getMaxSizeResponsePDU(), stateRef,   
  145.               statusInformation);   
  146.       } catch (MessageException ex) {   
  147.           ex.printStackTrace();   
  148.       }   
  149.   }   
  150.        
  151.     public static void main(String[] args) {   
  152.         SnmpProcessor a = new SnmpProcessor("udp:192.168.0.118/161""lkj""MD5""mysnmplkj""DES""mysnmplkj", SnmpConstants.version3);   
  153.         a.run();   
  154.     }   
  155.   
  156. }  


2:以下是我写的网管与代理交互部分:
Java代码
  1. package com.medou.agent;   
  2.   
  3. import java.io.IOException;   
  4. import java.util.Vector;   
  5. import org.snmp4j.CommunityTarget;   
  6. import org.snmp4j.PDU;   
  7. import org.snmp4j.ScopedPDU;   
  8. import org.snmp4j.Snmp;   
  9. import org.snmp4j.Target;   
  10. import org.snmp4j.TransportMapping;   
  11. import org.snmp4j.UserTarget;   
  12. import org.snmp4j.event.ResponseEvent;   
  13. import org.snmp4j.mp.MPv3;   
  14. import org.snmp4j.mp.SnmpConstants;   
  15. import org.snmp4j.security.AuthMD5;   
  16. import org.snmp4j.security.AuthSHA;   
  17. import org.snmp4j.security.PrivAES128;   
  18. import org.snmp4j.security.PrivAES192;   
  19. import org.snmp4j.security.PrivAES256;   
  20. import org.snmp4j.security.PrivDES;   
  21. import org.snmp4j.security.SecurityLevel;   
  22. import org.snmp4j.security.SecurityModels;   
  23. import org.snmp4j.security.SecurityProtocols;   
  24. import org.snmp4j.security.USM;   
  25. import org.snmp4j.security.UsmUser;   
  26. import org.snmp4j.smi.Address;   
  27. import org.snmp4j.smi.GenericAddress;   
  28. import org.snmp4j.smi.OID;   
  29. import org.snmp4j.smi.OctetString;   
  30. import org.snmp4j.smi.TcpAddress;   
  31. import org.snmp4j.smi.VariableBinding;   
  32. import org.snmp4j.transport.DefaultTcpTransportMapping;   
  33. import org.snmp4j.transport.DefaultUdpTransportMapping;   
  34.   
  35. /**  
  36.  * 本类用于向管理进程发送GET信息  
  37.  *  
  38.  * @author   
  39.  *  
  40.  */  
  41. public class SnmpUtilSendGet {   
  42.     private Address targetAddress = null;   
  43.     private OID authProtocol;   
  44.     private OID privProtocol;   
  45.     private OctetString privPassphrase;   
  46.     private OctetString authPassphrase;   
  47.     private OctetString securityName = new OctetString();   
  48.     private int version;   
  49.     private String host;   
  50.     private Target target;   
  51.     private OctetString community = new OctetString("public");   
  52.     private TransportMapping transport;   
  53.        
  54.     /**  
  55.      * 初始化Snmp信息  
  56.      * @param host  
  57.      * @param user  
  58.      * @param authProtocol  
  59.      * @param authPasshrase  
  60.      * @param privProtocol  
  61.      * @param privPassphrase  
  62.      * @param version  
  63.      */  
  64.     public SnmpUtilSendGet(String host, String user,    
  65.           String authProtocol, String authPasshrase, String privProtocol,    
  66.             String privPassphrase, int version) {   
  67.           this.authPassphrase = new OctetString(authPasshrase);   
  68.           this.securityName = new OctetString(user);   
  69.           this.privPassphrase = new OctetString(privPassphrase);   
  70.           this.version = version;   
  71.           this.host = host;   
  72.           if (authProtocol.equals("MD5")) {   
  73.               this.authProtocol = AuthMD5.ID;   
  74.           } else if (authProtocol.equals("SHA")) {   
  75.               this.authProtocol = AuthSHA.ID;   
  76.           }   
  77.           if (privProtocol.equals("DES")) {   
  78.               this.privProtocol = PrivDES.ID;   
  79.           } else if ((privProtocol.equals("AES128"))   
  80.                   || (privProtocol.equals("AES"))) {   
  81.               this.privProtocol = PrivAES128.ID;   
  82.           } else if (privProtocol.equals("AES192")) {   
  83.               this.privProtocol = PrivAES192.ID;   
  84.           } else if (privProtocol.equals("AES256")) {   
  85.               this.privProtocol = PrivAES256.ID;   
  86.           }   
  87.       }   
  88.        
  89.     /**  
  90.      * 创建snmp  
  91.      * @throws IOException  
  92.      */  
  93.     public Snmp createSnmpSession() throws IOException {   
  94.         // 设置管理进程的IP和端口   
  95.         targetAddress = GenericAddress.parse(host);   
  96.         if (targetAddress instanceof TcpAddress) {   
  97.             transport = new DefaultTcpTransportMapping();   
  98.         } else {   
  99.             transport = new DefaultUdpTransportMapping();   
  100.         }   
  101.         Snmp snmp = new Snmp(transport);   
  102.         if (version == SnmpConstants.version3) {   
  103.             USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);   
  104.             SecurityModels.getInstance().addSecurityModel(usm);   
  105.             // Add the configured user to the USM   
  106.             addUsmUser(snmp);   
  107.         }   
  108.         return snmp;   
  109.     }   
  110.        
  111.     /**  
  112.      * 加入user信息(snmp3)  
  113.      * @param snmp  
  114.      */  
  115.     private void addUsmUser(Snmp snmp) {   
  116.         snmp.getUSM().addUser(securityName, new UsmUser(securityName,   
  117.                                                         authProtocol,   
  118.                                                         authPassphrase,   
  119.                                                         privProtocol,   
  120.                                                         privPassphrase));   
  121.     }   
  122.        
  123.     /**  
  124.      * 创建PUD  
  125.      * @param target  
  126.      * @return  
  127.      */  
  128.     public PDU createPDU(Target target) {   
  129.         PDU request;   
  130.         if (target.getVersion() == SnmpConstants.version3) {   
  131.             request = new ScopedPDU();   
  132.         } else {   
  133.             request = new PDU();   
  134.         }   
  135.         return request;   
  136.     }   
  137.        
  138.     /**  
  139.      * 创建Target  
  140.      * @return  
  141.      */  
  142.     private Target createTarget() {   
  143.         if (version == SnmpConstants.version3) {   
  144.           UserTarget target = new UserTarget();   
  145.           if (authPassphrase != null) {   
  146.             if (privPassphrase != null) {   
  147.               target.setSecurityLevel(SecurityLevel.AUTH_PRIV);   
  148.             } else {   
  149.               target.setSecurityLevel(SecurityLevel.AUTH_NOPRIV);   
  150.             }   
  151.           } else {   
  152.             target.setSecurityLevel(SecurityLevel.NOAUTH_NOPRIV);   
  153.           }   
  154.           target.setSecurityName(securityName);   
  155.           return target;   
  156.        } else {   
  157.           CommunityTarget target = new CommunityTarget();   
  158.           target.setCommunity(community);   
  159.           return target;   
  160.        }   
  161.     }   
  162.        
  163.     /**  
  164.      * 向管理进程发送Trap报文  
  165.      *  
  166.      * @throws IOException  
  167.      */  
  168.     @SuppressWarnings("unchecked")   
  169.     public void sendPDU() throws IOException {   
  170.         // 设置 target   
  171.         Snmp snmp = createSnmpSession();   
  172.         target = createTarget();   
  173.         target.setAddress(targetAddress);   
  174.         // 通信不成功时的重试次数   
  175.         target.setRetries(2);   
  176.         // 超时时间   
  177.         target.setTimeout(1500);   
  178.         // snmp版本   
  179.         target.setVersion(version);   
  180.            
  181.         transport.listen();   
  182.         // 创建 PDU   
  183.         PDU pdu = createPDU(target);   
  184. //        pdu.add(new VariableBinding(new OID(".1.3.6.1.2.3377.10.1.1.1.2"),   
  185. //                new OctetString("JavaEE")));   
  186.         pdu.add(new VariableBinding(new OID(".1.3.4")));   
  187.         pdu.setType(PDU.GET);   
  188.         System.out.println(pdu);   
  189.         ResponseEvent respEvnt = snmp.send(pdu, target);   
  190.         System.out.println(respEvnt.getResponse());   
  191.         // 解析Response   
  192.         if (respEvnt != null && respEvnt.getResponse() != null) {   
  193.             Vector<VariableBinding> recVBs = respEvnt.getResponse()   
  194.             .getVariableBindings();   
  195.             for (int i = 0; i < recVBs.size(); i++) {   
  196.                 VariableBinding recVB = recVBs.elementAt(i);   
  197.                 System.out.println(recVB.getOid() + " : " + recVB.getVariable());   
  198.             }   
  199.         }   
  200.         snmp.close();   
  201.     }   
  202.   
  203.     public static void main(String[] args) {   
  204.         try {   
  205.             SnmpUtilSendGet util = new SnmpUtilSendGet("udp:192.168.0.118/161""lkj""MD5""mysnmplkj""DES""mysnmplkj", SnmpConstants.version3);   
  206.             util.createSnmpSession();   
  207.             util.sendPDU();   
  208.         } catch (IOException e) {   
  209.             e.printStackTrace();   
  210.         }   
  211.     }   
  212.   
  213. }  
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
基于Java使用Snmp4j进行监控与采集(snmptrap、snmpwalk、snmpget)
zabbix监控docker容器
JwtUser JwtAuthenticationEntryPoint JwtAuthorizationTokenFilter JwtUserDetailsService
Spring Data JPA教程:审计(二)
flowable 绕过idm自带的身份验证
SpringBoot SpringSecurity Druid解决CSRF开启问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服