TestDiscoverLAN

publicité
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
Source : 00:00:00:10:11:12
Flags : 0x80
(adresse multicast des commutateurs)
(adresse qui permet de détecter notre trame)
(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-------rw-------rw-------rw-------rw-------rw-------rw-------rw-------rw-------
1 gsirou
1 gsirou
1 gsirou
1 gsirou
1 gsirou
1 gsirou
1 gsirou
1 gsirou
1 gsirou
1000
1000
1000
1000
1000
1000
1000
1000
1000
1303 Jan
719 Jan
422 Jan
1523 Jan
1815 Jan
1550 Jan
5906 Jan
2367 Jan
820 Jan
18 17:19
18 17:19
24 14:45
24 14:50
24 14:59
18 17:23
24 15:15
18 17:23
24 14:57
Groupe1a_Snoop.h
Groupe1a_SockRaw.h
Main.java
ProtoDescr.java
Send.java
Snoop.c
Snoop.java
SockRaw.c
SockRaw.java
include pour interfaçage libpcap
include pour interfaçage libnet
main
Description générique de protocole
Envoie la trame 802.1d spoofée
Interfaçage C entre libpcap/JAVA
Sniffe les trames 802.1d du réseau
Interfaçage C entre libpnet/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
Téléchargement