:: Enseignements :: ESIPE :: E4INFO :: 2012-2013 :: Applications réseaux ::
[LOGO]

Adresses IP, résolution de nom et manipulation de bits


Exercice 1 - Adresses IP et résolutions de noms

Copier-coller le code ci-dessous dans un nouveau projet Java 7 eclipse.

package fr.upem.net.inet;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class AboutInetAddress {
  public static void main(String[] args) throws UnknownHostException {
    InetAddress myLocalHost = InetAddress.getLocalHost();
    System.out.println("My own \"local\" address is : " + myLocalHost);
        
    if(args.length == 0)
      return;
    
    String name = args[0];
    InetAddress ia = InetAddress.getByName(name);
    System.out.println(ia);
  }
}
  
  1. Quelles informations sont utilisées lors de l'exécution de ce programme sans arguments?
  2. Utiliser ce programme avec un argument sur la ligne de commande pour afficher les noms et adresses IP des machines suivantes :
    • la machine connue sous le nom www.univ-mlv.fr ;
    • la machine dont l'adresse IP est 193.55.63.80 ;
    • la machine dont l'adresse IP est 300.55.63.80.
    Indiquer pour ces machines s'il y a résolution de nom ?
  3. Modifier le code pour connaitre le nom canonique de chaque machine ci-dessus. Tester l'affichage par défaut (toString()) avant et après la recherche du nom canonique: que peut on en déduire?
  4. Tester le programme ci-dessus plusieurs fois consécutives avec le nom www.google.com. Que peut on en déduire? Compléter le programme pour que toutes les adresses associées au nom passé en argument sur la ligne de commande soient affichées.

Exercice 2 - Manipulation de bits et de bytes d'adresses

Nous allons maintenant compléter notre classe pour obtenir plus d'informations sur l'adresse IP d'une machine particulière passée en argument.

  1. Écrire une méthode classAddressOf(InetAddress ia) qui retourne la classe d'adresse (A, B, C, D ou E) de l'adresse passée en argument si elle est IPv4, et lève une exception IllegalArgumentException sinon.
    On rappelle que les adresses de classe A ont leurs 4 premiers bits du premier octet qui valent 0xxx, que ces bits valent 10xx pour les adresses de classe B, 110x pour les adresses de classe C, 1110 pour les adresses de classe D et 1111 pour les adresses de classe E.
    Les soucis que vous pouvez rencontrer tiennent principalement à deux choses: en Java tous les types primitifs (byte inclus) sont signés, et tous les types numériques entiers (byte, short, char...) subissent une promotion entière (ils sont transformés en int) avant d'être manipulés
  2. Écrire une méthode printSquareBrackets(InetAddress ia) qui affiche les octets qui composent une adresse IP entre crochets, et ce qu'elle soit IPv4 ou IPv6. Par exemple:
    $ java fr.upem.net.inet.AboutInetAddress fe80:0:0:0:224:2cff:fe49:2cd6
    [fe][80][0][0][0][0][0][0][2][24][2c][ff][fe][49][2c][d6]
    $ java fr.umlv.inet.InetUtil 193.55.63.80
    [193][55][63][80]
    
  3. Comment feriez vous pour avoir un affichage plus proche du standard utilisé en IPv6, du genre:
    [fe80][0][0][0][224][2cff][fe49][2cd6]
    

Exercice 3 - Interfaces réseaux

Écrire un programme Java qui réalise les opérations suivantes :
  1. Récupérer et afficher l'ensemble des interfaces réseaux (NetworkInterface) de la machine courante.
    Pour chaque interface, faire afficher la valeur du MTU et l'ensemble des adresses IP qui leur sont associées.
  2. À partir d'une adresse IP ou d'un nom, passé en argument sur la ligne de commande de votre programme, représentant une des adresses IP de la machine, faites en sorte que soit affiché le nom de l'interface réseau à laquelle elle est associée, le cas échéant.

Exercice 4 - Pour aller plus loin

  1. La méthode InetAddress.isReachable() permet de tester si une machine est atteignable sur le réseau. Testez la sur une adresse passée en argument sur la ligne de commande.
    Utiliser votre programme pour savoir si les machines www.w3.org et www.google.fr sont "atteignables" à partir de la machine locale.
    Qu'en déduisez vous sur l'implantation de cette méthode en mode utilisateur ?
  2. Modifier le programme pour qu'il affiche si une adresse IP est une adresse multicast, de loopback ou publique.