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