Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3024 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  détection de traps SNMP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

détection de traps SNMP

n°2183423
bloomingda​ls
Posté le 01-04-2013 à 13:38:48  profilanswer
 

Bonjour ,
 
j'ai un bout de code java que je ne veux éxécuter que si un certain évènement surgit dans mon agent snmp (cet agent est installé sur un routeur distant).
j'aimerai savoir comment je pourrai détécter la trap SNMP qui correspond à cet évènement sur ma machine pour que je puisse déclencher l'exécution de mon code??
 
j'ai une classe java qui reçoit des trap mais je sais pas si une autre configuration est requise sur ma machine pour que les traps fonctionnent!!!
 
merci bcp pour votre aide

mood
Publicité
Posté le 01-04-2013 à 13:38:48  profilanswer
 

n°2183424
o'gure
Multi grognon de B_L
Posté le 01-04-2013 à 14:56:25  profilanswer
 

Sans connaître ton code personne ne pourra répondre vu que c'est toi qui l'a développé...


---------------
Relax. Take a deep breath !
n°2183425
bloomingda​ls
Posté le 01-04-2013 à 15:02:44  profilanswer
 

si tu parle de la classe qui reçoit des traps alors non c'est pas moi qui l'ai développé je l'ai trouvé sur internet j'ai oublié le site de référence mais en tout cas voila la classe:
 
/* To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.g2.snmp.client;
import java.io.IOException;
 
import org.snmp4j.CommandResponder;
import org.snmp4j.CommandResponderEvent;
import org.snmp4j.CommunityTarget;
import org.snmp4j.MessageDispatcher;
import org.snmp4j.MessageDispatcherImpl;
import org.snmp4j.MessageException;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.mp.MPv1;
import org.snmp4j.mp.MPv2c;
import org.snmp4j.mp.StateReference;
import org.snmp4j.mp.StatusInformation;
import org.snmp4j.security.PrivDES;
//import org.snmp4j.security.SecurityProtocols;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.TcpAddress;
import org.snmp4j.smi.TransportIpAddress;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.transport.AbstractTransportMapping;
import org.snmp4j.transport.DefaultTcpTransportMapping;
import org.snmp4j.transport.DefaultUdpTransportMapping;
import org.snmp4j.util.MultiThreadedMessageDispatcher;
import org.snmp4j.util.ThreadPool;
 
public class TrapReceiver implements CommandResponder {
 public static void main(String[] args) {
  TrapReceiver snmp4jTrapReceiver = new TrapReceiver();
  try {
   snmp4jTrapReceiver.listen(new UdpAddress("adresse/162" ));
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 
 /**
  * Trap Listner
  */
 public synchronized void listen(TransportIpAddress address)
   throws IOException {
  AbstractTransportMapping transport;
  if (address instanceof TcpAddress) {
   transport = new DefaultTcpTransportMapping((TcpAddress) address);
  } else {
   transport = new DefaultUdpTransportMapping((UdpAddress) address);
  }
 
  ThreadPool threadPool = ThreadPool.create("DispatcherPool", 10);
  MessageDispatcher mDispathcher = new MultiThreadedMessageDispatcher(
    threadPool, new MessageDispatcherImpl());
 
  // add message processing models
  mDispathcher.addMessageProcessingModel(new MPv1());
  mDispathcher.addMessageProcessingModel(new MPv2c());
 
  // add all security protocols
  //SecurityProtocols.getInstance().addDefaultProtocols();
  //SecurityProtocols.getInstance().addPrivacyProtocol(new PrivDES());
 
  // Create Target
  CommunityTarget target = new CommunityTarget();
  target.setCommunity(new OctetString("community" ));
 
  Snmp snmp = new Snmp(mDispathcher, transport);
  snmp.addCommandResponder(this);
 
  transport.listen();
  System.out.println("Listening on " + address);
 
  try {
   this.wait();
  } catch (InterruptedException ex) {
   Thread.currentThread().interrupt();
  }
 }
 
 /**
  * This method will be called whenever a pdu is received on the given port
  * specified in the listen() method
  */
 public synchronized void processPdu(CommandResponderEvent cmdRespEvent) {
  System.out.println("Received PDU..." );
  PDU pdu = cmdRespEvent.getPDU();
  if (pdu != null) {
   System.out.println("Trap Type = " + pdu.getType());
   System.out.println("Variables = " + pdu.getVariableBindings());
   }
  }
 }

n°2183426
o'gure
Multi grognon de B_L
Posté le 01-04-2013 à 15:07:30  profilanswer
 

Ce que je veux dire, c'est que tu développes un truc from scratch qui reçoit des traps. Tu as peut être récupéré des trucs à droite/à gauche, au final c'est toi qui fait l'intégration des différentes briques.

 

Bref, c'est à toi de modifier/développer la classe qui reçoit les trap pour  les interpréter et derrière exécuter telle ou telle action en appelant telle ou telle fonction.

 

En lisant ce que tu viens de balancer, avec un minimum de logique et de notion d'anglais on voit que tu dois le faire ici


 /**
  * This method will be called whenever a pdu is received on the given port
  * specified in the listen() method
  */
 public synchronized void processPdu(CommandResponderEvent cmdRespEvent) {
  System.out.println("Received PDU..." );
  PDU pdu = cmdRespEvent.getPDU();
  if (pdu != null) {
   System.out.println("Trap Type = " + pdu.getType());
   System.out.println("Variables = " + pdu.getVariableBindings());
   }
  }
 }


cette fonction déclenche un processus basique qui consiste simplement à écrire sur l'output standard le trap reçu.


Message édité par o'gure le 01-04-2013 à 15:12:14

---------------
Relax. Take a deep breath !
n°2183427
o'gure
Multi grognon de B_L
Posté le 01-04-2013 à 15:08:35  profilanswer
 

Une question idiote : avant de te lancer dans le dev brut from scratch, tu as regarder s'il n'existait pas quelque chose déjà pour faire cela ou avec un minimum de modif ? Il existe plein d'outils open source pour la gestion des réseaux, je suis surpris qu'il n'existe rien déjà pour déclencher es actions en fonction de trap snmp...


Message édité par o'gure le 01-04-2013 à 15:10:58

---------------
Relax. Take a deep breath !
n°2183428
bloomingda​ls
Posté le 01-04-2013 à 15:13:46  profilanswer
 

je ne suis pas supposé utiliser un outil open source. je suis en stage je suis sensée developper et non pas utiliser un  logiciel prêt puis l'intégrer.
de plus si j'ai posté la classe c'est pasque j'ai une exception en retour ( cannot assign address) pourtant le port 162 n'est pas utilisé sur ma machine linux.
 

n°2183429
o'gure
Multi grognon de B_L
Posté le 01-04-2013 à 15:25:45  profilanswer
 

bloomingdals a écrit :

je ne suis pas supposé utiliser un outil open source. je suis en stage je suis sensée developper et non pas utiliser un  logiciel prêt puis l'intégrer.


C'est bien dommage. Les développements en interne de cette manière conduisent souvent à une solution inexploitable après que la personne l'ayant mis en place quitte l'établissement... Alors que des softs avec une infra/communauté pour le support existent... Par ailleurs sur des solutions opensource tu peux également développer pour apporter des améliorations... Bref, réinventons la roue...

 
bloomingdals a écrit :

de plus si j'ai posté la classe c'est pasque j'ai une exception en retour ( cannot assign address) pourtant le port 162 n'est pas utilisé sur ma machine linux.


Pourquoi ne pas l'avoir dit dès le départ ? Nous ne pouvons pas deviner tout sans aucun élément...
Le site d'origine indiquait peut être comment utiliser la classe ? Tu as mis à jour la ligne ?

  snmp4jTrapReceiver.listen(new UdpAddress("adresse/162" ));


Tu peux poster *exactement* la trace de l'erreur ?

 


Message édité par o'gure le 01-04-2013 à 15:28:29

---------------
Relax. Take a deep breath !
n°2183430
bloomingda​ls
Posté le 01-04-2013 à 15:37:26  profilanswer
 

voici le message d'erreur  
 
java.net.BindException: Cannot assign requested address
 at java.net.PlainDatagramSocketImpl.bind0(Native Method)
 at java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:95)
 at java.net.DatagramSocket.bind(DatagramSocket.java:376)
 at java.net.DatagramSocket.<init>(DatagramSocket.java:231)
 at java.net.DatagramSocket.<init>(DatagramSocket.java:284)
 at org.snmp4j.transport.DefaultUdpTransportMapping.<init>(Unknown Source)
 at com.g2.snmp.client.TrapReceiver.listen(TrapReceiver.java:50)
 at com.g2.snmp.client.TrapReceiver.main(TrapReceiver.java:35)
 
si je change l'adresse avec "localhost" ca donne ça (ce qui prouve que la classe n'a aucun probleme)
 
Listening on 127.0.0.1/162
 
bien sur je peu pas écouter sur le localhost puisque mon agent snmp se trouve sur le routeur

n°2183431
o'gure
Multi grognon de B_L
Posté le 01-04-2013 à 15:41:21  profilanswer
 

bloomingdals a écrit :

voici le message d'erreur

 

java.net.BindException: Cannot assign requested address
 at java.net.PlainDatagramSocketImpl.bind0(Native Method)
 at java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:95)
 at java.net.DatagramSocket.bind(DatagramSocket.java:376)
 at java.net.DatagramSocket.<init>(DatagramSocket.java:231)
 at java.net.DatagramSocket.<init>(DatagramSocket.java:284)
 at org.snmp4j.transport.DefaultUdpTransportMapping.<init>(Unknown Source)
 at com.g2.snmp.client.TrapReceiver.listen(TrapReceiver.java:50)
 at com.g2.snmp.client.TrapReceiver.main(TrapReceiver.java:35)


Et tu essayes d'utiliser quelle adresse lorsque tu as ce message ?
Lorsque tu postes des erreurs, donne le contexte qui déclenche cette erreur... Comme je le disais, on ne peut pas tout deviner... Là on le code générique, on a le message d'erreur, on n'a pas ta conf...

 
bloomingdals a écrit :


si je change l'adresse avec "localhost" ca donne ça (ce qui prouve que la classe n'a aucun probleme)
Listening on 127.0.0.1/162

 

bien sur je peu pas écouter sur le localhost puisque mon agent snmp se trouve sur le routeur


Essaye 0.0.0.0 ou l'adresse de l'interface de ton serveur. Et quand tu donnes des infos ici, donne exactement la conf/code que tu as fournis sinon on ne peut pas deviner les erreurs de  conf...


Message édité par o'gure le 01-04-2013 à 15:42:47

---------------
Relax. Take a deep breath !
n°2183432
bloomingda​ls
Posté le 01-04-2013 à 15:45:47  profilanswer
 

l'adresse que je met est 10.53.3.150/162 qui correspond à l'adresse du routeur surlequel je travaille

mood
Publicité
Posté le 01-04-2013 à 15:45:47  profilanswer
 

n°2183433
o'gure
Multi grognon de B_L
Posté le 01-04-2013 à 15:48:24  profilanswer
 

bloomingdals a écrit :

l'adresse que je met est 10.53.3.150/162 qui correspond à l'adresse du routeur surlequel je travaille


Nan mais c'est pas l'adresse du routeur qu'il faut mettre...
T'es dans une archi client serveur. Le serveur c'est ton code, le client c'est le routeur. Le routeur se connecte au serveur (à l'adresse que tu lui a collé dans la conf).
Si tu lances ton serveur en lui disant de binder sa socket sur une adresse qu'il ne connait pas, il te jète... C'est un peu la base.

 

Colle lui 0.0.0.0 qui correspond à toutes les adresses du serveur, ou alors l'adresse du serveur (celle qui est adressée sur le serveur, celle sur laquelle le routeur va taper pour envoyer ses traps...)


Message édité par o'gure le 01-04-2013 à 15:49:31

---------------
Relax. Take a deep breath !
n°2183434
Wolfman
Lobo'tomizado
Posté le 01-04-2013 à 15:52:34  profilanswer
 

Ce sujet a été déplacé de la catégorie Systèmes & Réseaux Pro vers la categorie Programmation par Wolfman

n°2183435
bloomingda​ls
Posté le 01-04-2013 à 16:00:06  profilanswer
 

j'ai cru que c'était moi le client et le routeur est mon serveur car c'est lui l'agent snmp !!
j'ai fait ce que tu m'a dit et il n'y a plus d'excéption.
merci bcp

n°2183436
o'gure
Multi grognon de B_L
Posté le 01-04-2013 à 16:04:29  profilanswer
 

bloomingdals a écrit :

j'ai cru que c'était moi le client et le routeur est mon serveur car c'est lui l'agent snmp !!
j'ai fait ce que tu m'a dit et il n'y a plus d'excéption.
merci bcp


ça dépend de quoi on parle :
- pour le polling snmp, le client interroge le serveur pour avoir les stats, ta station de supervision interroge ton routeur.
- les traps snmp, le client envoie son message au serveur, le routeur envoie son trap à ta station de supervision.


Message édité par o'gure le 01-04-2013 à 16:05:29

---------------
Relax. Take a deep breath !
n°2183438
bloomingda​ls
Posté le 01-04-2013 à 16:09:27  profilanswer
 

justement!! la classe a pour nom "trap receiver" car elle écoute les trap en provenance de l'agent snmp!! je suis la station de supervision , je peux pas écouter sur mon adresse je dois écouter sur l'adresse du routeur ce qui explique pourquoi j'ai mis l'adresse du routeur au début

n°2183439
o'gure
Multi grognon de B_L
Posté le 01-04-2013 à 16:12:42  profilanswer
 

bloomingdals a écrit :

justement!! la classe a pour nom "trap receiver" car elle écoute les trap en provenance de l'agent snmp!! je suis la station de supervision , je peux pas écouter sur mon adresse je dois écouter sur l'adresse du routeur ce qui explique pourquoi j'ai mis l'adresse du routeur au début


Non mais ça n'a aucun sens d'écouter sur une adresse que l'on a pas...
Pour les traps SNMP, ta station de supervision écoute ce qu'on lui dit, elle est passive. Tu lui dis sur quelle adresse écouté.
Ton routeur lui parle, tu lui dis à qui parler quand il a quelque chose à dire, à remonter.

 

C'est comme si t'as 10 gusses dans une pièce. Si l'un veut dire quelque chose à un autre il va gueuler "hey michel, je t'envoie un trap snmp". Michel, lui fait gaffe uniquement lorsqu'on l'interpelle. Ben là c'est pareil, tu dis à ton soft d'écouter sur telle adresse, lorsque le routeur voudra parler il parlera vers cette adresse.

 


Pour le polling snmp, c'est exactement l'inverse. Ta station de supervision va parler vers ton routeur "hey adresse du routeur, file moi les stats de machin"


Message édité par o'gure le 01-04-2013 à 16:14:20

---------------
Relax. Take a deep breath !
n°2183444
bloomingda​ls
Posté le 01-04-2013 à 17:12:35  profilanswer
 

merci bcp pour l'explication. c'est rigolo mais je saisi


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  détection de traps SNMP

 

Sujets relatifs
Detection ie10 bureau ou metroProblème d'include lié à iostream et SNMP++
Javascript Detection Bouton Home Iphone quitter navigateurDétection Tablette en php
Détection et affichage suivant overflowScript Détection Windows ne fonctionne pas sous Seven
supervision des équipements +des liens avec snmpapplication réseau avec le protocole SNMP
detection de front montantPublicité ciblée avec détection de langue
Plus de sujets relatifs à : détection de traps SNMP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR