:: Enseignements :: ESIPE :: EISC3 :: 2013-2014 :: Programmation Java réseau ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Cache-cache avec les résolutions |
L'objectif de cet exercice est de réaliser un petit résolveur DNS qui conservera dans un cache sur le disque les dernières résolutions réalisées.
Résolveur simple
Écrire un programme SimpleResolver retournant la liste des adresses IP liées à un nom de domaine.
On affichera par ailleurs le nom canonique si celui-ci est différent du nom original et on indiquera pour chaque adresse IP si celle-ci est accessible sur le réseau local.
Résolveur avec cache
Afin d'éviter les résolutions inutiles, on souhaite conserver en cache sur le disque les résolutions antérieures.
On procède donc de la manière suivante :
- Nous vérifions si un fichier nommé d'après le domaine demandé se trouve dans le répertoire de cache. Si le fichier est présent, nous récupérons les adresses IP qu'il contient et nous les affichons.
- Si le fichier n'existe pas, nous devons réaliser la résolution. À l'issue de celle-ci, nous stockons le résultat dans le répertoire de cache et affichons les adresses IP. Si nous redemandons la résolution pour ce domaine, nous pourrons utiliser récupérer les données du fichier créé.
Pour le stockage en cache de la résolution d'un nom `foo.example.com`, nous créeons un fichier cache/foo.example.com qui contient les adresses IP résolues. Le fichier est une suite d'adresses exprimées sous forme octale. Chaque adresse est préfixée par un octet : de valeur 4 pour introduire une adresse IPv4 (suivi par les 4 octets de l'adresse), de valeur 6 pour une adresse IPv6 (suivi des 16 octets de l'adresse).
- Écrire la méthode permettant d'écrire un fichier de résolution en cache.
- Écrire la méthode pour lire un fichier de résolution en cache.
- Combiner ces méthodes avec le programme précédent pour obtenir un résolveur avec cache.
Remarques
En pratique un système de cache est déjà utilisé en mémoire par le système (notre système est un peu redondant... mais cela permet de nous entraîner à utiliser adresses IP, `InputStream` et `OutputStream`. En outre un bon système de cache devrait prendre en compte la durée de vie (TTL) de l'entrée DNS.
Quelques indications
Il est possible de vérifier l'existence d'un fichier par `new File(chemin).exists()`. Il est possible également d'essayer d'instantier un FileInputStream pour le fichier, instantiation qui échouera avec `FileNotFoundException` si le fichier est inexistant.
© Université de Marne-la-Vallée