Introduction à tcpdump

Quoi, tu fais du réseau et tu connais pas tcpdump, nan mais allo quoi !!! En effet, tout admin réseau qui se respecte connait cet outil, et pour cause, il s’agit d’un de ses meilleurs amis.

Tcpdump est un puissant outil de capture réseau (sniffer) en ligne de commande. Il permet l’analyse des trames réseau en temps réel. Grâce à l’utilisation de la librairie libpcap, il est possible de sauvegarder et d’exporter les captures vers des analyseurs compatibles comme le très célèbre wireshark.

Tcpdump s’installe sur GNU/Linux, on va donc faire nos tests sur un raspberry.

Pour l’installation, bah tout simplement, en root :

Voilà c’est tout, vous pouvez dès à présent l’utiliser. On verra différent cas de figure tout au long de l’article pour que vous vous fassiez une idée des possibilités, mais tout d’abord on va simplement lancer la commande telle quelle et attendre que quelques paquets soient capturés. Pour arrêter la capture il suffit de faire la combinaison Ctrl+c.

Note : Il faut que vous ayez les droit root pour pouvoir exécuter la commande.

Petites explications basiques sur le premier paquet capturé:

00:16:11.725924 : Correspond à l’heure.
IP : Correspond au type de protocole.
192.168.1.200.ssh : Correspond à l’ip et au port source. (Le port 22 étant associé au ssh, tcpdump préfère convertir le port 22 en « ssh ». Pour laisser le n° du port, il faut utiliser l’option -n).
192.168.1.134.42427 : Correspond à l’ip et au port destination.
Flags [P.] : Correspond au flag TCP. Ici, le flag PUSH et ACK.
seq 1973231107:1973231303 : Correspond au n° de séquence TCP.
ack 1754903922 : Correspond au n° d’acquittement TCP.
win 261 : Correspond à la taille de la fenêtre TCP.
options […] : Correspond aux options TCP.
length 196 : Correspond à la taille du paquet IP avec l’en-tête en Bytes.

C’est basique je vous l’accorde mais je ne vais pas m’étaler sur le protocole TCP/IP dans cet article. En revanche je vais vous donner quelques exemples concrets. Mais avant voyons les options les plus utiles :

-D : Lister les interfaces disponibles :
-i <interface> : Écoute sur une interface spécifique :
-n : Ne résous pas les ip et ports en noms.
-v | -vv | -vvv : Affiche plus ou moins d’informations.
-cx : Capture x paquets uniquement.
-x : Affiche le contenu du paquet en HEX.
-A : Affiche le contenu du paquet en ASCII.
-X : Affiche le contenu du paquet en HEX et ASCII.
-s <len>: Capture uniquement <len> bytes du paquet. s0 indique qu’on capture le paquet entier.
-w : Capture les paquets dans un fichier.

Maintenant voyons un peu les filtres :

host <host> : Capture les paquets ayant pour adresse source ou destination, l’ip (ou le nom) <host>.
src host <host> : Capture les paquets ayant pour adresse source l’ip (ou le nom) <host>.
dst host <host> : Capture les paquets ayant pour adresse destination l’ip (ou le nom) <host>.
src|dst port <port> : Idem que pour les host mais pour les ports.

Maintenant le but du jeu va être de combiner ces options pour en faire des utilisations plus concrètes :

Je veux capturer les paquets DNS (udp/53) de mon interface eth0 :

Maintenant à l’inverse, je veux tous les paquets udp, sauf ceux concernant le DNS et sans les résolutions de nom. On peut cumuler les filtres grâce au opérateur « and » ou « or » :

Je veux capturer les paquets ICMP qui sortent de mon interface :

J’aurais aussi pu réaliser cette capture qui va récupérer uniquement les paquets ICMP echo-reply (type 8) :

Si maintenant je veux exporter a capture dans un fichier pcap pour l’analyser avec wireshark ensuite

Dans le cas où on redirige dans un fichier on ne voit pas s’afficher les traces à l’écran pourtant comme vous le voyez dans le récapitulatif final, des paquets ont bien été capturés. Si je récupère le fichier, je peux bien l’analyser avec wireshark !

tcpdump_wireshark

Maintenant on va capturer l’intégralité (-s0) des paquets lors d’une connexion FTP et les afficher en HEXA et ASCII (-X) :

Vous voyez le contenu des paquets en HEXA et ASCII. Ca peut faire vormir certes mais on peut voir des choses interessantes. Si vous faites attention vous verrez les commandes USER et PASS envoyées au serveur FTP et on voit que les données transitent en clair… Bon vous remarquerez aussi que j’ai mis un mot de passe bidon hein 😉

Voilà, je vous encourage vivement à creuser cet outil car très puissant. N’hésitez pas à essayer des combinaisons d’options et voir comment il réagi. A noter que tcpdump s’avère extrement puissant pour debugger des situations. Il permet de comprendre le comportement d’un point de vue réseau.

Si vous voulez un récapitulatif des commandes les plus courantes avec tcpdump, le site packetlife propose un document parfait à mettre sur votre chevet.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.