IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Connaitre la class de l'@ réseau d'une InetAdress


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Par défaut Connaitre la class de l'@ réseau d'une InetAdress
    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.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu confond complètement les bytes[] représentnat l'adresse (4 bytes en TCP4) avec les byte représentant une String (pour ton "/255.255.255.0", 14 bytes). de plus tu confond les masque d'adresse avec les adresse ou encore les classes d'adresses. Tout ca n'est pas lié et tu peux pas betement les comparer.
    Tu récupère le byte[] de l'adresse et suivant la valeur du premier byte tu a la classe. Un peux de recherche sur internet dit que:

    A 1 - 127
    B 128 - 191
    C 192 - 223

    Note: 127 est réservé au loopback, mais c'est une classe A quand même

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Par défaut
    t'as raison en ce qui concerne la différence entre les bytes de l'@ et les bytes du string j'avais pas remarqué.Pour ce qui est pour la suite moi je veux juste connaitre la classe d'une adresse ip a partir de son masque si le masque est 255.0.0.0 c'est une @ de classe a et ainsi de suite pour cela je passe a ma fonction uniquement le masque de l'@ip que j'extrait en utilisant jpcap de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            NetworkInterface[] devices = JpcapCaptor.getDeviceList();
     
            for(int i = 0 ; i < devices.length ; i++)
            {
                System.out.println(devices[i].name);
                for (NetworkInterfaceAddress a : devices[i].addresses)
                {
                    System.out.println(" address:"+a.address + " " + a.subnet + " "+ a.broadcast);
                    int classe = getClassReseau(a.subnet);
                    System.out.println("classe:"+classe);
                }
            }
    }
    remarque je passe le masque de l'@ a la fonction pour tester et non l'adresse elle même.Au passage je suis arrivé a définir la fonction coorectement et elle marche et 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
    12
    13
    14
     
        private static int getClassReseau(InetAddress adr){
            String masque = new String(String.valueOf(adr));
            String masqueC = new String("/255.255.255.0");
            String masqueB = new String("/255.255.0.0");
            String masqueA = new String("/255.0.0.0");
            if(masque.equals(masqueC)==true)
                return 3;
            if(masque.equals(masqueB)==true)
                return 2;
            if(masque.equals(masqueA)==true)
                return 1;
            return 3;
        }

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pour info, il n'y a pas de lien direct entre classe d'adresse et masque de sous réseau. Par exemple, une interface dans une classe C peut très bien avoir comme masque de sous réseau 255.255.255.128, de même une classe B peut très bien avoir comme masque de sous réseau 255.255.255.0. Les masques de sous réseau sont indépendant de la classe (mise à part le fait qu'ils peuvent seulement etre plus restricitf que la classe, on va jamais voir une classe C avec 255.0.0.0 par exemple) et il arrivé régulièrement que l'on coupe une classe en plusieurs sous réseaux.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Réseau] Envoyer une trame tcp
    Par heid dans le forum Web & réseau
    Réponses: 5
    Dernier message: 18/07/2005, 13h07
  2. [Applet]utiliser une classe d'un package dans une applet
    Par jeromejanson dans le forum Applets
    Réponses: 1
    Dernier message: 30/06/2005, 08h13
  3. [info] [réseau] Lancer une appli distante et récupérer i/o
    Par legzo dans le forum Entrée/Sortie
    Réponses: 16
    Dernier message: 29/06/2005, 13h48
  4. Connaitre le type de chaque col d'une table Paradox
    Par mjp dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/02/2005, 21h00
  5. [Réseau] Créer une connexion Internet
    Par Tranber dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 17/10/2002, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo