Manipulation de Traps SNMP en C et Java

Programmation en Java

Comme nous l'avons vu précédemment, pour récupérer les alertes SNMP, le manager doit écouter sur le port UDP 162. Nous allons donc créer un serveur udp écoutant sur ce port. Le message arrivant au manager est bien-sûr encodé en ASN.1-BER et devrait être décodé. Pour cela on peut utiliser un paquetage libre, sck.



Il faudra inclure dans le CLASSPATH du programme, le chemin de l'archive sck.jar




package fr.umlv.ir3.rjourdan;

import java.io.ByteArrayInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

import sck.Message;

/**
 * @author rjourdan
 *
 * This program listens on port 162 to get SNMP Trap. The sck.jar provides 
 * the library to decode the message coded in ANS.1-BER
 */


public class TrapListener {

	  private final static int trapPort = 162;

	  public static void main(String[] argv){
	    try {
	    //We create the UDP socket on port 62
	      DatagramSocket sock = new DatagramSocket(trapPort);
	      while (true){
	                byte[] b = new byte[1024];
	        DatagramPacket p = new DatagramPacket(b,b.length);

	        sock.receive(p); // block 

	        ByteArrayInputStream ber = new ByteArrayInputStream(b,1,p.getLength()-1); 
		//The Message class is given by the archive sck.jar and will decode the message from ASN.1-BER
	        Message m = new Message(ber);

	        System.out.println("Trap received at : " + new java.util.Date());
	        StringBuffer buf = new StringBuffer();
	        m.println("",buf);
	        System.out.println(buf);
	      }
	    } 
	    catch (Exception e){
	        System.err.println(e);
	        System.exit(1);
	    }
	  }
}