Bonjour tout le monde.Dont le cadre d'un projet que je suis entrain de réalise je dois connaitre la classe d'une @réseau.pour cela j'utilise le mécanisme suivant je récupere le masque de l'@ réseau en question(en utilisant jpcap) et je le passe a une fonction qui doit me retourner un entier qui représente la classe et c'est là mon problème j'arrive pas a réalise la comparaison,Voici le code de la fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
private static int getClassReseau(InetAddress adr){
          System.out.println("masque:"+adr);
          String masqueC = new String("/255.255.255.0");
          byte[] c = masqueC.getBytes();
          byte[]t = adr.getAddress();
          if(Arrays.equals(t,c)==true)
             return 1;
          else
             return 0;
}
Cette fonction teste uniquement si l'@ est de classe c(si elle marche pour cette classe elle marchera pour les autres).
Tout d'abord j'affiche l'@ pour voir si je reçois bien l'@ et elle est correcte elle m'affiche /255.255.255.0 mais le test est toujours a false.L'idée était de convertir l'@ en tableau de byte et de la comparer et de la comparer avec une representation du masque en byte[].Mais comme j'ai dit plut tôt sa marche pas.
L'autre idée que j'ai eu est d'au lieu de convertir en byte[] je convertit l'@ en string et je compare avec une representatioon en string du masque qlq chose du genre suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
    private static int getClassReseau(InetAddress adr){
        System.out.println("debut:"+adr);
        String masqueC = new String("/255.255.255.0");
        String t1=null;
        try {
            t1 = new String(adr.getAddress(), "ISO-8859-1");
            System.out.println("ici:"+t1);
        } catch (UnsupportedEncodingException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
        if(t1.equals(masqueC)==true)
            return 1;
        else
            return 0;
}
Mais le problème est que la convertion ne se passe bien et m'affiche toujours des caractères bizarres comme ceux là:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.
Il y aussi un autre moyen je pense et c'est le plus facile a mon avis est d'utiliser la méthode equal de InetAdress mais pour cela il faut tout d'abord que j'arrive a crée un objet représentant la valeur du masque.dans ce cas la fonction ressemblerait à ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
    private static int getClassReseau(InetAddress adr){
         InetAdress f = new InetAdress("255.255.255.0");
         if(adr.equals(f)==true)
            return 1;
         else
            return 0;
}
Là le problème est que j'arrive pas a crée l'objet f avec l'@ que je veux.