利用SNMP4J實現Snmp Trap

下面是兩個用於發送和接收Trap報文信息的類:

  1. import java.io.IOException;   
  2. import java.net.UnknownHostException;   
  3. import java.util.Vector;   
  4.   
  5. import org.snmp4j.CommandResponder;   
  6. import org.snmp4j.CommandResponderEvent;   
  7. import org.snmp4j.MessageDispatcherImpl;   
  8. import org.snmp4j.Snmp;   
  9. import org.snmp4j.TransportMapping;   
  10. import org.snmp4j.mp.MPv1;   
  11. import org.snmp4j.mp.MPv2c;   
  12. import org.snmp4j.mp.MPv3;   
  13. import org.snmp4j.security.SecurityModels;   
  14. import org.snmp4j.security.SecurityProtocols;   
  15. import org.snmp4j.security.USM;   
  16. import org.snmp4j.smi.Address;   
  17. import org.snmp4j.smi.GenericAddress;   
  18. import org.snmp4j.smi.OctetString;   
  19. import org.snmp4j.smi.TcpAddress;   
  20. import org.snmp4j.smi.UdpAddress;   
  21. import org.snmp4j.smi.VariableBinding;   
  22. import org.snmp4j.transport.DefaultTcpTransportMapping;   
  23. import org.snmp4j.transport.DefaultUdpTransportMapping;   
  24. import org.snmp4j.util.MultiThreadedMessageDispatcher;   
  25. import org.snmp4j.util.ThreadPool;   
  26.   
  27. /**  
  28.  * 本類用於監聽代理進程的Trap信息  
  29.  *   
  30.  * @author zhanjia  
  31.  *  
  32.  */  
  33. public class MultiThreadedTrapReceiver implements CommandResponder {   
  34.   
  35.     private MultiThreadedMessageDispatcher dispatcher;   
  36.     private Snmp snmp = null;   
  37.     private Address listenAddress;   
  38.     private ThreadPool threadPool;   
  39.   
  40.     public MultiThreadedTrapReceiver() {   
  41.         // BasicConfigurator.configure();   
  42.     }   
  43.   
  44.     private void init() throws UnknownHostException, IOException {   
  45.         threadPool = ThreadPool.create("Trap"2);   
  46.         dispatcher = new MultiThreadedMessageDispatcher(threadPool,   
  47.                 new MessageDispatcherImpl());   
  48.         listenAddress = GenericAddress.parse(System.getProperty(   
  49.                 "snmp4j.listenAddress""udp:192.168.1.23/162")); // 本地IP與監聽端口   
  50.         TransportMapping transport;   
  51.         // 對TCP與UDP協議進行處理   
  52.         if (listenAddress instanceof UdpAddress) {   
  53.             transport = new DefaultUdpTransportMapping(   
  54.                     (UdpAddress) listenAddress);   
  55.         } else {   
  56.             transport = new DefaultTcpTransportMapping(   
  57.                     (TcpAddress) listenAddress);   
  58.         }   
  59.         snmp = new Snmp(dispatcher, transport);   
  60.         snmp.getMessageDispatcher().addMessageProcessingModel(new MPv1());   
  61.         snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c());   
  62.         snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3());   
  63.         USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3   
  64.                 .createLocalEngineID()), 0);   
  65.         SecurityModels.getInstance().addSecurityModel(usm);   
  66.         snmp.listen();   
  67.     }   
  68.   
  69.        
  70.     public void run() {   
  71.         try {   
  72.             init();   
  73.             snmp.addCommandResponder(this);   
  74.             System.out.println("開始監聽Trap信息!");   
  75.         } catch (Exception ex) {   
  76.             ex.printStackTrace();   
  77.         }   
  78.     }   
  79.   
  80.     /**  
  81.      * 實現CommandResponder的processPdu方法, 用於處理傳入的請求、PDU等信息  
  82.      * 當接收到trap時,會自動進入這個方法  
  83.      *   
  84.      * @param respEvnt  
  85.      */  
  86.     public void processPdu(CommandResponderEvent respEvnt) {   
  87.         // 解析Response   
  88.         if (respEvnt != null && respEvnt.getPDU() != null) {   
  89.             Vector<VariableBinding> recVBs = respEvnt.getPDU().getVariableBindings();   
  90.             for (int i = 0; i < recVBs.size(); i++) {   
  91.                 VariableBinding recVB = recVBs.elementAt(i);   
  92.                 System.out.println(recVB.getOid() + " : " + recVB.getVariable());   
  93.             }   
  94.         }   
  95.     }   
  96.   
  97.     public static void main(String[] args) {   
  98.         MultiThreadedTrapReceiver multithreadedtrapreceiver = new MultiThreadedTrapReceiver();   
  99.         multithreadedtrapreceiver.run();   
  100.     }   
  101.   
  102. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章