Architecture des réseaux
TD 2
Manipulation de bits et d'adresses IP avec Java
Exercice 1
- Manipulation de bits avec Java
Deux caractéristiques du langage Java sont cruciales dans la
programmation réseau et les manipulations d'adresses:
- Une promotion entière est systématiquement effectuée lors
de toute opération binaire sur les types primitifs numériques
entiers short et byte, c'est-à-dire qu'ils sont
convertis en int avant de subir l'opération;
- Ces types primitifs numériques entiers sont tous signés
(leur bit de poids fort est toujours considéré comme un bit de signe).
Écrire le code Java permettant d'effectuer deux décalages à droite
sur un octet donné de type byte, vu comme huit bits. Par
exemple, on veut que decal2Droite(32) donne 8, ce
qui semble normal vu la représentation bit à bit de ces deux octets
(00100000 et 00001000), mais on veut en revanche que
decal2Droite(-124) donne 33, puisque les
représentations bit à bit de ces deux valeurs sont 10000100 et
00100001).
Quelle précaution supplémentaire doit on prendre pour un déclage de
2 vers la gauche?
Exercice 2
- Adresses IP en Java
Écrire un programme Java qui permet d'afficher les noms et adresses
IP des machines suivantes:
- la machine locale sur laquelle est exécuté le programme.
- la machine connue sous le nom www.univ-mlv.fr.
- la machine dont l'adresse IP est 138.96.32.3.
- n'importe quelle machine dont le nom est passé en argument.
Une machine (par exemple, un routeur) peut avoir plusieurs adresses
IP. Comment connaître, par exemple, toutes les adresses de
stamand2.renater.ft.net?
Exercice 3
- Manipulation des adresses IP
Écrire un programme Java qui permet d'afficher sur 4 lignes
successives la valeur des 4 octets constituant l'adresse IP d'un nom
de machine donné.
Écrire une classe de méthodes de manipulation d'adresses IP
permettant de:
- Déterminer et retourner, sous la forme d'une String la
classe d'une adresse IP acceptée en entrée:
String getClassName(InetAddress address)
- Déterminer et retourner l'adresse IP correspondant à un tableau
de byte et à l'indice du premier octet de l'adresse dans
ce tableau:
InetAddress byteToInetAddress(byte[] address, int offset)
- Déterminer et retourner, sous la forme d'une adresse IP, le
masque d'une adresse IP fournie sous la forme d'un tableau de byte
et de l'indice du premier octet de l'adresse dans ce tableau (on ne
tiendra compte ici que des classes A, B et C):
InetAddress getMask(byte[] address, int offset)
- Déterminer et retourner, sous la forme d'une adresse IP,
l'adresse de broadcast associée à la classe d'une adresse acceptée
en entrée:
InetAddress getBroadcast(byte[] address, int offset)
- Déterminer et retourner l'adresse IP de broadcast local:
InetAddress getLocalBroadcast()
Etienne.Duris[at]univ-mlv.fr - © Université de Marne-La-Vallée -
Février 2000 - http://www-igm.univ-mlv.fr/~duris