Nicolas Blancpain
Grégoire Sirou
A3 Réseau
Projet A3 - Partie 1a
Détection du commutateur racine
Sources disponibles sur les comptes :
~gsirou/TestDiscoverLAN-groupes_1a_2_4_7_10.tar.gz.
~jlestic/upload/TestDiscoverLAN-groupes_1a_2_4_7_10.tar.gz.
I. Le spanning tree, ou comment connaître la racine ?
1. L’algorithme
Le spanning tree est un algorithme permettant de trouver un arbre de recouvrement
minimum. Celui-ci est découvert par l’échange entre les commutateurs de trames au format
802.1d, une implémentation du protocole du spanning tree.
Exemple d’arbre minimum :
Dans un réseau, l’arbre de recouvrement minimum :
Ne contient aucune boucle
Est suffisant pour assurer que l’on peut atteindre toutes les stations du réseau
Le protocole 802.1d utilise les messages contenant, entre autres, les informations suivantes :
Root ID : identification de la racine actuelle
Cost : Coût du lien de plus faible coût entre le switch qui transmet le message et la
racine
Transmitting ID : identification du port qui émet
L’élection se fait sur ces paramètres.
Les messages sont envoyés en multicast (@dest=tous les commutateurs) mais ne sont
jamais retransmis par les commutateurs.
2. Construction du spanning tree
Au démarrage, un commutateur se considère comme la racine et transmet un message
802.1d avec comme coût 0 et sur tous les ports.
Sur chaque port, le commutateur reçoit en permanence les messages 802.1d et
sauvegarde pour chaque port le meilleur message.
Si un commutateur reçoit sur un port un meilleur message 802.1d que celui qu’il
transmettrait, il arrête de transmettre son message 802.1d.
Le protocole converge lorsqu’un seul commutateur transmet ses messages 802.1d sur
le réseau.
3. Détermination de la racine
Dans un réseau, la racine est :
le commutateur avec le plus petit identificateur
ou
un commutateur désigné par l’administrateur
Chaque commutateur peut déterminer quelle est la racine en analysant tous les messages
802.1d reçus.
II. Le programme
1. Java Native Interface, ou comment former nos paquets ?
Java ne donne pas accès aux couches basses réseaux.. Pour former nos trames 802.1d
il va donc falloir contourner cette limitation en utilisant JNI.
JNI (NNI dans java 1.0) permet d’interfacer du C/C++ à du java.
Nous avons donc créé deux fonctions natives, l’une permettant d’écouter le réseau (cf
snoop) et l’autre d’émettre des trames 802.1d.
Pour simplifier le port de notre programme, nous avons utilisé les librairies libnet et
libpcap, car elles sont déjà disponibles sur un grand nombre d’OS
2. La partie Java
Nous créons une trame 802.1d spoofée qui contient les valeurs suivantes :
Destination : 01:80:c2:00:00:00 (adresse multicast des commutateurs)
Source : 00:00:00:10:11:12 (adresse qui permet de détecter notre trame)
Flags : 0x80 (notification de changement de topologie)
Les autres paramètres n’ont ici pas d’influence.
Le CRC32 de la trame est calculé, puis la trame est envoyée.
La seconde partie du programme consiste à sniffer le réseau, dans l’attente d’une trame
802.1d différente de celle spoofée.
Une fois qu’une telle trame est reçue, le programme extrait le root et l’enregistre dans la base
de donnée du module 10.
Liste des fichiers :
-rw------- 1 gsirou 1000 1303 Jan 18 17:19 Groupe1a_Snoop.h include pour interfaçage libpcap
-rw------- 1 gsirou 1000 719 Jan 18 17:19 Groupe1a_SockRaw.h include pour interfaçage libnet
-rw------- 1 gsirou 1000 422 Jan 24 14:45 Main.java main
-rw------- 1 gsirou 1000 1523 Jan 24 14:50 ProtoDescr.java Description générique de protocole
-rw------- 1 gsirou 1000 1815 Jan 24 14:59 Send.java Envoie la trame 802.1d spoofée
-rw------- 1 gsirou 1000 1550 Jan 18 17:23 Snoop.c Interfaçage C entre libpcap/JAVA
-rw------- 1 gsirou 1000 5906 Jan 24 15:15 Snoop.java Sniffe les trames 802.1d du réseau
-rw------- 1 gsirou 1000 2367 Jan 18 17:23 SockRaw.c Interfaçage C entre libpnet/JAVA
-rw------- 1 gsirou 1000 820 Jan 24 14:57 SockRaw.java Envoi de trames ethernet
Pour plus d’informations sur les classes Java, il faut consulter la documentation HTML
(format javadoc) : http://isep.myip.org/TestDiscoverLAN/
Pour recréer la documentation, utiliser javadoc à partir du répertoire TestDiscoverLAN/src/ :
javadoc -author -private -d ~/doc Groupe1a/*.java
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !