1 Introduction
Pour pouvoir analyser finement le trafic réseau lorsqu'il y a, par exemple, un problème que l'on n'arrive pas à déterminer, il peut être utile de voir ce qu'il se passe réellement sur le réseau. Pour cela il existe des sniffers qui sont des outils qui permettent de récupérer les paquets qui passent physiquement sur un réseau (quelque soit la destination de ces paquets). Il existe un outil sous licence GNU qui permet de faire cela et qui permet d'interpréter la structure des paquets, cela de façon graphique
2 le programme
Cet outil s'appelle Ethereal et il est disponible
ici Il est aussi nécessaire de connecter cette machine avec une carte réseau sur le réseau à sniffer, a priori en la connectant sur un hub. On ne peut voir que les paquets qui passent physiquement sur le réseau auquel est connecté la carte réseau. Ce qui veux dire que si l'on veux analyser des paquets qui ne sont pas à destination de notre machine, il faut que l'on soit sur un réseau à collisions (tout le monde utilise le même câble réseau à tour de rôle) ce qui est le cas des réseaux 10 base 2 (coax) ou 10/100 base T avec l'utilisation d'un concentrateur Ethernet ou HUB.
L'installation de ce logiciel dépendra du format dans lequel vous vous l'êtes procuré. Dans tous les cas, il n'y a pas vraiment de problèmes si vous disposez d'une installation standard de Linux. Il faut être sous une session graphique (X Window) pour utiliser ce logiciel et le lancer sous le compte root.
Pour lancer ce logiciel, il suffit d'utiliser un terminal et d'y taper la commande /usr/local/bin/ethereal ou /usr/bin/ethereal (ethereal devrait d'ailleurs suffire). Si vous n'êtiez pas sous le compte root, utilisez la commande su - puis le mot de passe du root avant de lancer ethereal. Voilà vous utilisez Ethereal. Pour plus d'informations sur l'utilisation même du produit, tapez man ethereal à l'invite de commande d'un shell.
Le principe est simple, vous lancez une session de capture à l'aide du menu
Capture. Cette session peut être interactive ou pas. En d'autres termes, les paquets capturés peuvent être affichés au fur et à mesure ou à la fin de la capture.
Pour lancer une session de capture, il faut accéder au menu Capture puis cliquer sur l'option Start....
Apparaît la boîte de dialogue qui permet de spécifier ce qui doit être analysé.
Le champ Interface permet de choisir l'interface sur laquelle on va écouter. Sur le portable, l'interface doit être
eth0 car c'est la seule. Si cette interface n'est pas disponible vérifiez que vous êtes bien sur le compte root. Il n'y a que le root qui peut sniffer les paquets
Le champ
Count permet de spécifier le nombre des paquets sniffés. La valeur
0 (Infinite) indique qu'Ethereal captera des paquets jusqu'à ce qu'on lui demande d'arrêter. Vient ensuite un champ intéressant.
Le champ
Filter permet de limiter les paquets qui seront conservés. Seuls les paquets pour lesquels cette expression est vraie seront conservés. Dans l'exemple donné, on ne conservera que les paquets dont le protocole est udp avec le port source ou destination
53 qui correspond au protocole DNS. Pour des détails sur les filtres, se référer au chapitre sur
Les filtres.
Le champ
File permet de spécifier un fichier dans lequel se trouve les paquets si on veut analyser une trace faite avec tcpdump par exemple. Dans notre cas, on s'en fiche puisqu'on veut faire notre capture maintenant.
Update liste of packets in realtime permet (s'il est coché) de voir les paquets s'afficher en temps réel (pendant la capture) dans la fenêtre des paquets disponibles. Cette option ne doit être utilisée que si il n'y a pas trop de paquets conservés.
Automatic scrolling in live capture permet (s'il est coché) de voir les derniers paquets s'afficher en temps réel (pendant la capture) dans la fenêtre des paquets disponibles en faisant défiler la liste des paquets disponibles. Cette option ne doit être utilisée que s'il y a peu de paquets (surtout sur un portable avec un affichage plus que lent).
Enable name resolution permet (s'il est coché) de demander une traduction des adresses IP en noms. Cette option doit aussi être manipulée avec "précaution" car elle génère des requêtes DNS qui peuvent "encombrer" le réseau et prendre du temps. Surtout s'il y a beaucoup de machines différentes dans les paquets et qu'elles ne sont pas connues dans les DNS.
Durant la capture, une boîte de dialogue récapitule les paquets qui sont conservés. En même temps les paquets apparaissent dans la fenêtre principale si l'option
Update liste of packets in realtime a été cochée. L'appui du bouton
Stop permet d'arrêter la capture. Les paquets deviennent disponibles dans la fenêtre principale s'ils n'étaient pas déjà disponibles.
L'affichage des résultats se décompose en trois parties :
1° La liste des paquets capturés disponibles en dessous de la barre de menu avec un affichage synthétique du contenu de chaque paquet.
2° La décomposition exacte du paquet actuellement sélectionné dans la liste. Cette décomposition permet de visualiser les champs des entêtes des protocoles ainsi que l'imbrication des différentes couches de protocoles connus.
3° La troisième zone contient le paquet (le début s'il est trop gros) affiché en hexadécimal et en ASCII.
Tout en bas du programme se trouve un champ
filter. Il permet de n'afficher que les paquets qui correspondent aux critères spécifiés dans ce champ filter. C'est un filtre qui permet de temporairement cacher une partie des paquets.
Voici un exemple du détail que l'on peut obtenir pour un paquet. La vision synthétique du paquet est disponible en haut, la zone du milieu nous donne l'éclaté des protocoles en jeux dans ce paquet (les différentes couches avec les champs associés). Dans la partie du bas, on retrouve le paquet en format "brut" affiché en hexadécimal et en ASCII. Un clic sur un des champs du paquet (dans la zone centrale) met en gras les octets correspondant dans la vision brut du paquet.
3 Les filtres
Il y a deux sortes de filtres. Les filtres à la capture et les filtres à l'affichage. Ces filtres n'ont pas la même syntaxe. La syntaxe des filtres à la capture est la même que les filtres utilisés pour la commande
tcpdump. Pour en connaître le format, il faut donc utiliser
man tcpdump. Quand aux filtres à l'affichage, la syntaxe est une syntaxe propriétaire à ethereal. Pour en connaître la syntaxe, il faut utiliser la commande
man ethereal. La section présente donne des exemples pour ces deux types de filtres.
3.1 Filtres de capture Ne seront gardés que les paquets pour lesquels le filtre est vrai. Les filtres se décomposent en 3 parties :
• le
protocole qui peut être
ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp ou udp,
• la direction qui peut être
src ou
dst,
• un champ qui peut être
host, net ou
port suivi d'une valeur.
Les opérateurs
and, or et
not peuvent être utilisés pour combiner des filtres
3.2 Filtres d'affichage Les filtres d'affichage sont un peu plus fin que ceux de la capture. Seuls les paquets pour lesquels l'expression du filtre est vraie seront gardés. Les expressions sont basées sur les champs disponibles dans un paquet. Le simple ajout d'un champ veut dire que l'on garde le paquet si ce champ est disponible. Maintenant, on peut aussi utiliser les opérateurs ==, !=, >, <, >= et <= pour comparer les champs avec des valeurs. Les expressions ainsi fabriquées peuvent être combinées avec les opérateurs && (pour un et logique), || (pour un ou logique), ^^ (pour le ou exclusif) et ! pour la négation. L'usage des parenthèses est possible.
Voici quelques exemples de champs disponibles (taper man ethereal pour une liste exhaustive) :
Voici quelques exemples de filtres
merci de votre attention!!
merci au cours de notre professeur Mr B.