Vous êtes sur la page 1sur 16

Ministère de l’Enseignement Supérieur de la

Recherche Scientifique et la
Technologie
*** * ***

Université 07 novembre à Carthage


*** * ***
Institut National des Sciences
Appliquées et de Technologie

Compte rendu
TP1 Réseaux Locaux: Réalisation
d’un programme de capture de
trames

Elaboré par :
Abdelkrim FITOURI
Salmen HITANA
Niveau : 4 ème année réseaux informatiques et
télécommunications
Année universitaire : 2009/2010
1
Partie1 : Capture de trame avec Wireshark et
Libpcap

Introduction :

Ethereal est le plus ancien analyseur de trafic, même s’il a encore un site
www.ethereal.com ,le projet a pris une nouvelle tournure et s’appelle
Wireshark(www.wireshark.org).

Wireshark est un logiciel libre d'analyse de protocole, ou « packet sniffer » qui


capture les trames et affiche leurs contenus en détails , utilisé dans le
dépannage et l'analyse de réseaux informatiques, le développement de
protocoles, l'éducation et la rétro-ingénierie, mais aussi pour examiner la sécurité
des réseaux et pour le piratage.Wireshark est multiplate-forme, il fonctionne sous
Windows, Mac OS X, Linux, Solaris, ainsi que sous FreeBSD.
Wireshark reconnait 759 protocoles.
Wireshark a quelques fonctionnalités qui ne se trouvent pas dans les autres sniffé
gratuit comme le réassemblage de paquets (reconstruction du trafic), il les filtre
avec une syntaxe particulière, affichage détaillé des informations sur un
protocole….

Wireshark nécessite la bibliothèque Winpcap, très facile à installer et à configurer


,cette bibliothèque sera utilisée dans la 2 eme partie du TP « réalisation d’un
programme de capture de trame ».

Cette bibliothèque nous permet un très haut degré de contrôle de la


communication réseau, c’est pour cela qu’elle est utilisée dans plusieurs
programmes qui ont une partie de traitement sur les paquets, comme l’IDS Snort.

Capture de trame : mise en œuvre :

Après l’installation, nous allons écouter le réseau avec Wireshark.

✔ Remarque :

Dans les réseaux commutés nous pouvons voir que les paquets entrants,
sortent de notre machine ou le trafic broadcaste.

Tout d’abord on doit choisir l’interface avec laquelle on va écouter le réseau :

2
On appuie sur START pour commencer l’écoute :

➢ Les paquets sont codés selon les protocoles qui s’y trouvent.
➢ Dans la partie encadrée en rouge :
• La première colonne correspond au numéro du paquet
• Time : temps écoulé depuis le lancement de la capture et l’arrivée de la
trame.
• 3 ème colonne l’adresse source (IP ou MAC selon le protocole)
• 4 ème colonne l’adresse destination (IP ou MAC selon le protocole
aussi).
• 5 ème colonne correspond au protocole utilisé.
• Dernière colonne quelques informations relatives sur le contenu du
paquet (flag, numéro de séquence, port…).
➢ Une pile d’encapsulation est construite (partie encadré avec la couleur
verte) qui contient des informations pour chaque paquet :
• Les protocoles utilisés dans chaque couche.
• Le contenu des différents champs de chaque protocole.

Ci-dessous un exemple du contenu du protocole Ethernet :

3
Tout en bas de la fenêtre on trouve le contenu du paquet en format hexadécimal
(rouge) et ASCII (vert) :

Utilisation des filtres :

L’utilisation des filtres peut s’avérer utile si on veut voir juste des paquets
spécifiques par exemple qui sont destinés à notre machine ou utilisant un
protocole donné.

Pour appliquer les filtres :

• Tout d’abord on choisit un protocole parmi plus de 1000 protocoles


disponibles.
• Ensuite on choisit les champs (environ 80000 champs disponibles dans la
version 1.0.5).
• On choisit l’opérateur.
• Et enfin la valeur qu’on va comparer.

Les paquets ICMP:

4
On peut taper directement « icmp » dans le champ « filtre » :

En choisissant une trame ont peut facilement dégager sa structure :

Comme on peut facilement le constater, le protocole ICMP contient les champs


suivants:

On veut maintenant afficher les paquets ICMP avec une adresse destination
74.125.39.174 qui est l’adresse IP de www.google.com

On écrit alors dans le champ filtre :

icmp AND ip.dst==74.125.39.174

On aura alors :

Les trames ARP :

Le protocole ARP (Adresse Résolution Protocole) permet de trouver l’adresse MAC


d’une machine depuis une adresse IP connu.

5
Fonctionnement :

Quand une machine a un datagramme IP à envoyer, elle doit informer le réseau


(couche Ethernet par exemple) de l’adresse mac de la destination.

Si la machine ne trouve pas l’adresse mac dans son ARP cache elle utilise le
protocole ARP pour le trouver.

La machine envoie alors un ARP-REQUEST qui contient dans son champ adresse
destination, une adresse broadcaste mac sous la forme ff-ff-ff-ff-ff-ff et l’adresse
IP destination. Cette trame sera envoyée à toute les machines du réseau.

Si la machine concernée (qui a l’adresse ip destination) reçoit le paquet elle


envoi son adresse MAC dans une trame ARP-REPLY.

La machine émettrice reçoit alors le paquet ARP-REPLY et ajoute l’adresse MAC


dans son cache.

Voilà le fonctionnement de l’ARP :

Le protocole TCP :

Pour afficher les 3 phases de connexion on utilise le filtre

(ip.addr eq 192.168.1.10 and ip.addr eq 192.168.1.1) and (tcp.port eq 80)

192.168.1.10 est l’adresse ip de la machine qu’on utilise

192.168.1.1 est l’adresse ip du routeur qu’on utilise et qui contient une interface
web donc en tapant son adresse dans l’explorateur web on accédera à l’interface
web du routeur donc il va y avoir une établissement de connexion entre la
machine et le routeur qui contient un serveur web .

6
On aura alors :

Et voici un schéma qui explique les étapes de l’établissement de connexion


entre deux machines .

Figure qui résume le principe d’établissement de la connexion.

Le premier paquet de synchronisation :

Le 2 ème paquet SYN ACK pour accepter la connexion :

7
Et enfin le 3 ème paquet pour que le client informe le serveur qu’il va
maintenant commencer l’envoi des données.

8
2 ème partie : Réalisation d’un programme
qui capture les Trames
Dans cette partie nous allons réaliser un programme qui utilise la bibliothèque
LIBPCAP pour capturer les trames en s’inspirant de Wireshark.

Le programme permettra de capturer puis décoder les paquets de type IP, UDP,
TCP, ICMP, ARP, et ETHERNET qui transitent sur le réseau.

On utilisera le C comme langage et le GCC comme compilateur dans la


réalisation de ce programme On doit tout d’abord installer la bibliothèque
LIBPCAP sur Fedora l’installation est simple puisque la bibliothèque existe dans le
gestionnaire des paquets synoptique de Fedora ce qui permet de l’installer dans
deux simple cliques.

Pour chaque paquet capturé on affiche les entêtes et leur contenu.

Première étape : ajout des entêtes :

Tous d’abord on doit ajouter la structure des entêtes dans le fichier « headers.h »

Remarque :

Les entêtes Ethernet ,IP, TCP sont déjà présentes.

9
Paquet UDP :

10
Le choix des types de chaque champ est effectué selon :

Source www.commentcamarche.com

Par exemple pour la taille des ports :

On a choisi unsigned short car dans la trame réelle, la taille du port est de 16
bit (2 octet).

Ca aurait pu être un short in mais les numéros de port ne sont pas de signe
négatif.

11
Paquet ICMP :

Toutes les structures des paquets peuvent être trouvées dans le fichier
(/usr/include/netinet/*.h)

Paquet ARP :

12
Réalisation :

Menu principale :

Choix de l’interface

13
Affichage des informations liées à l’interface choisie et choix du nombre de
paquet à capturer

Choix du filtre à appliquer

Exemple d’écoute sur des paquets TCP

14
Exemple d’écoute sur des paquets ARP

Exemple d’écoute sur des paquets ICMP

15
Exemple d’écoute sur des paquets UDP

16