| Auteurs | : | Daniel Lacroix |
| Date de parution | : | 19 novembre 2007 |
| Dernière modification | : | 25 novembre 2007 |
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/wireshark ou /usr/bin/wireshark (wireshark 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 wireshark. Voilà vous utilisez wireshark. Pour plus d’informations sur l’utilisation même du produit, tapez man wireshark à 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....

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.
La section Stop Capture de spécifier le nombre des paquets sniffés. Si non spécifié fera que wireshark captera des paquets jusqu’à ce qu’on lui demande d’arrêter. Vient ensuite un champ intéressant.
Le champ Capture 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 Capture File permet de spécifier un fichier dans lequel on vas stoker la capture (ce n’est pas obligatoire).
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 network 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 barre 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 :
Tout en haut du programme se trouve un champ filtrer. Il permet de n’afficher que les paquets qui correspondent aux critères spécifiés dans ce champ filtrer. C’est un filtre qui permet de temporairement cacher une partie des paquets.

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 à wireshark. Pour en connaître la syntaxe, il faut utiliser la commande man wireshark. La section présente donne des exemples pour ces deux types de filtres.
Ne seront gardés que les paquets pour lesquels le filtre est vrai. Les filtres se décomposent en 3 parties :
Les opérateurs and, or et not peuvent être utilisés pour combiner des filtres.
| Filtre | Fonction |
| host 172.16.0.1 and tcp | ne conserve que les paquets TCP à destination ou en provenance de la machine 172.16.0.1 |
| udp port 53 | ne conserve que les paquets UDP en provenance ou en destination du port 53 |
| udp port 53 and dst host 172.16.0.1 | ne conserve que les paquets UDP en provenance ou en destination du port 53 à destination de la machine 172.16.0.1 |
| tcp dst port 80 and dst host 172.16.0.1 and src net 172.16.0.0 mask 255.255.255.0 | ne conserve que les paquets TCP en destination de la machine 172.16.0.1 sur le port 80 et en provenance des machines du réseau 172.16.0/24 |
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 wireshark pour une liste exhaustive) :
| Champ | Type | Signification |
| ip.addr | adresse IPv4 | adresse IP source ou destination |
| ip.dst | adresse IPv4 | adresse IP destination |
| ip.flags.df | booléen | Drapeau IP, ne pas fragmenter |
| ip.flags.mf | booléen | Drapeau IP, fragments à venir |
| ip.ttl | entier non signé sur 8 bits | Time to live |
| nbdgm.src.ip | adresse IPv4 | adresse IP source d’un paquet Netbios Datagram |
| nbdgm.src.port | entier non signé sur 16 bits | port IP source d’un paquet Netbios Datagram |
| http.request | booléen | requête HTTP |
| http.response | booléen | réponse HTTP |
| icmp.code | entier non signé sur 8 bits | numéro du code d’une commande ICMP |
| icmp.type | entier non signé sur 8 bits | numéro du type d’une commande ICMP |
| ftp.request | booléen | requête FTP |
| ftp.request.command | chaîne de caractères | commande FTP |
| ftp.reponse.data | chaîne de caractères | donnée de transfer FTP |
| dns.query | booléen | requête DNS |
| dns.response | booléen | réponse d’une requête DNS |
Voici quelques exemples de filtres :
| Filtre | Signification |
| ip.addr == 172.16.0.100 | tous les paquets IP en provenance ou à destination de la machine 172.16.0.100 |
| (ip.addr == 172.16.0.100) && (dns.response) | tous les paquets IP en provenance ou à destination de la machine 172.16.0.100 qui sont des réponses à des requêtes DNS |
| (ip.addr >= 172.16.0.100) && (ip.addr <= 172.16.0.123) | tous les paquets IP en provenance ou à destination des machines comprises entre l’adresse IP 172.16.0.100 et l’adresse IP 172.16.0.123 (comprises) |