Le sujet nous demandant de "spécifier et réaliser" une station passive RIP, nous avons compris qu'il nous était demandé d'implémenter une application
capturant les annonces RIP des routeurs et les traitant. Ayant déjà utilisé par le passé les librairies de capture de trames, étant à l'aise avec la programmation réseau, et sachant que nous avions déjà à notre disposition un certain nombre de briques élémentaires que nous pourrions réutiliser, la
difficulté du sujet ne nous a pas paru insurmontable, et réaliser cette implémentation nous semblait plus intéressante que nous contenter de chercher
un projet existant et l'utiliser (il nous aurait suffit de charger les sources, les compiler et l'exécuter avec la bonne configuration, ce qui présente un intérêt moindre, à nos yeux, que ce que nous avons fait).
Lorsque par la suite nous avons réalisé que nous aurions pû nous contenter d'utiliser des outils existant, nous avions déjà terminé notre implémentation, c'est pourquoi nous vous la présentons dans ce rapport. Le seul inconvénient de cette solution est que nous aurons besoin de routeurs lors de la présentation du projet afin de réaliser une maquette de réseau mettant en oeuvre le routage RIP et ainsi générer les annonces (cela ne pose aucun problème technique, mais simplement un problème de logistique pour ce qui est de l'accès aux routeurs). C'est d'ailleurs pour cette raison que notre implémentation ne gère que les messages RIPv1 (le code pour la gestion des messages RIPv2 a été réalisé mais n'a pû être testé), les routeurs CISCO utilisés n'implémentant que la version 1 de RIP.
La première étape de notre démarche a consisté en une recherche documentaire sur RIP afin d'obtenir les spécifications du protocole et nous baser dessus pour l'implémentation de la station passive. Nous avons donc consulté un certain nombre de documentations, et nous nous sommes plus particulièrement intéressés au RFC 2453 décrivant la version 2 du protocole RIP et ses mécanismes de compatibilité avec RIPv1.
Une fois que nous avions déterminé tous les mécanismes de fonctionnement d'une station passive RIP, nous nous sommes intéressés aux projets existants implémentant ce protocole dans l'espoir de pouvoir réutiliser certaines de leurs structures de données ou portions de code et ainsi définir nos choix d'implémentation. Nous avons trouvé dans la communauté du logiciel libre toute une série de projets, tels que le projet routed qui est le démon de routage "officiel" sous GNU/Linux, ou nx-routed qui est un projet basé sur routed. Nous avons identifié dans ces projets les portions de code mettant en oeuvre RIP afin de pouvoir les réutiliser (au final nous n'avons utilisé dans ceux-ci que la définition de la structure d'une trame RIPv2). Nous avons également recherché dans nos archives personnelles les programmes que nous avions déjà réalisé afin de réutiliser certaines brides de code ou objets C++ (notamment la gestion des adresses qui avait déjà été implémentée dans le cadre du projet Libemu (http://asmssm.sourceforge.net)). Durant cette étape, nous avons aussi confirmé nos choix d'implémentation (Système d'Exploitation Debian GNU/Linux, utilisation de la librairie de capture de trame Libpcap et du langage C++) et nous nous sommes documentés sur ceux-ci.
Dès lors, nous avions toutes les cartes en main pour comencer l'implémentation de l'application. Nous présentons dans la suite de ce rapport rapidement cette recherche documentaire dans la section 3, la répartition du travail dans la section 3.2, la phase d'implémentation (voir section 4 et enfin les tests de validation du protoype(section 5).
Frédéric Beck 2004-02-18