:: Enseignements :: ESIPE :: E4INFO :: 2011-2012 :: Applications réseaux ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Interface réseau, adresse IP, résolution de nom |
Exercice 1 - My name is 159.88, 193.50.159.88
Écrire un programme Java qui réalise les opérations suivantes :
-
Récupérer et afficher l'ensemble des interfaces réseaux
(NetworkInterface) de la machine courante.
-
Afficher l'adresse IP que vous utilisez pour communiquer
avec la machine locale, ainsi que le nom de l'interface réseau
à laquelle cette adresse est associée.
-
À partir d'une adresse IP ou d'un nom, passé en argument sur
la ligne de commande de votre programme, faites en sorte que
soit affiché le nom de l'interface réseau à laquelle elle est
associée, le cas échéant.
Exercice 2 - Bonnes résolutions
-
Écrire un programme Java qui permet d'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 ?
-
Quel est le nom canonique de www.univ-mlv.fr ?
Exercice 3 - Manipulation de bits et de bytes d'adresses
Nous allons maintenant faire évoluer notre programme pour afficher
des informations sur l'adresse IP d'une machine particulière
passée en argument.
-
Écrire un programme qui affiche le nom et l'adresse d'une machine
passée en argument. L'argument pourra être soit une adresse IP
soit un nom de machine.
-
É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
-
É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.umlv.inet.InetUtil 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]
-
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 4 - Plus d'informations sur les adresses
-
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 ?
-
Modifier le programme pour qu'il affiche si une adresse IP est une
adresse multicast, de loopback ou publique (attention petit piège).
-
Une machine (par exemple, un routeur) peut avoir plusieurs adresses IP.
Comment connaître, par exemple, toutes les adresses de www.w3.org.
Modifier votre programme en conséquence.
© Université de Marne-la-Vallée