L'un des principaux obstacles à l'étude des protocoles réseau est l'opacité des échanges. La plupart du temps, la complexité technique est masquée par des interfaces utilisateur fluides. Lorsque vous accédez à un serveur, vous ne voyez pas les requêtes ARP ou le processus de "three-way handshake" TCP, à moins d'utiliser des outils spécifiques. Tcpdump est l'outil de référence pour lever ce voile, permettant de capturer, filtrer et inspecter le trafic réseau brut afin de comprendre le fonctionnement réel des communications.
Développé à la fin des années 80, Tcpdump repose sur la bibliothèque libpcap (portée sous Windows sous le nom de winpcap ou npcap). Écrit en C/C++, il reste l'un des outils les plus performants et les plus stables pour l'analyse de trafic sur les systèmes de type Unix.
Configuration de base de la capture
L'exécution de Tcpdump sans argument est possible, mais peu utile en situation réelle. Il est crucial de définir l'interface à écouter et la manière dont les données doivent être traitées.
Sélection de l'interface réseau
L'option -i permet de spécifier l'interface. Pour voir toutes les interfaces disponibles, on utilise généralement ip link show ou ip addr.
# Lister les interfaces
user@system:~$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> ...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
# Capturer sur eth0
sudo tcpdump -i eth0
Sauvegarde et lecture de fichiers
Pour une analyse ultérieure (par exemple dans Wireshark), on enregistre le trafic dans un fichier .pcap avec l'option -w. Pour relire ce fichier, on utilise -r.
# Sauvegarder dans un fichier
sudo tcpdump -i eth0 -w traffic_capture.pcap
# Lire le fichier enregistré
tcpdump -r traffic_capture.pcap
Optimisatoin de l'affichage
Par défaut, Tcpdump tente de résoudre les adresses IP en noms de domaine et les numéros de ports en noms de services, ce qui peut ralentir le processus et polluer la sortie. L'option -n désactive la résolution DNS, et -nn désactive également la résolution des ports.
# Capture sans résolution de noms ni de ports
sudo tcpdump -i eth0 -c 10 -nn
| Option | Description |
|---|---|
-i [interface] |
Définit l'interface réseau (ex: eth0, any). |
-c [nombre] |
Arrête la capture après un nombre précis de paquets. |
-v, -vv, -vvv |
Augmente le niveau de détail des informations affichées. |
Précision via les expressions de filtrage
Face au volume massif de données transitant sur une carte réseau, le filtrage est indispensable pour isoler les communications pertinentes.
Filtres par hôte et port
Il est possible de cibler une machine spécifique par son IP ou son nom d'hôte, ainsi que des services via leurs ports.
# Filtrer le trafic d'un hôte spécifique
sudo tcpdump host 192.168.1.50
# Filtrer par source ou destination
sudo tcpdump src host 10.0.0.5
sudo tcpdump dst host 10.0.0.10
# Filtrer le trafic DNS (port 53)
sudo tcpdump port 53
Filtres par protocole
Tcpdump permet de restreindre la capture à des protocoles spécifiques comme icmp, tcp, udp, ou arp.
# Capturer uniquement les requêtes PING (ICMP)
sudo tcpdump icmp
Combinaisons logqiues
Les opérateurs and, or et not permettent de construire des requêtes complexes.
# Capturer le trafic HTTP (80) ou HTTPS (443) pour une IP donnée
sudo tcpdump host 1.1.1.1 and \(port 80 or port 443\)
# Capturer tout sauf le trafic SSH
sudo tcpdump not port 22
Analyse avancée des en-têtes
Pour les besoins d'investigation poussée, Tcpdump permet d'accéder directement aux octets des en-têtes de protocoles via la syntaxe proto[offset:taille].
Opérations binaires et Flags TCP
L'analyse des flags TCP (SYN, ACK, RST, etc.) est cruciale pour diagnostiquer des problèmes de connexion ou détecter des scans de ports. On peut utiliser des alias prédéfinis pour simplifier les filtres.
tcpdump "tcp[tcpflags] & tcp-syn != 0": Capture les paquets ayant au moins le flag SYN activé.tcpdump "tcp[tcpflags] == tcp-rst": Isole les paquets de réinitialisation de connexion (RST).
Il est également possible de filtrer par taille de paquet avec les primitives less et greater :
# Trouver des paquets anormalement volumineux
sudo tcpdump greater 1000
Personnalisation du format de sortie
La manière dont les données sont présentées à l'écran peut varier selon l'objectif de l'analyse (débogage de flux, lecture de contenu, etc.).
-q(Quiet) : Affiche des informations minimales pour une lecture rapide.-e: Inclut les en-têtes de la couche de liaison, affichant ainsi les adresses MAC.-A: Affiche le contenu des paquets en format ASCII. Très utile pour inspecter du trafic Web non chiffré.-X: Affiche les données en hexadécimal et en ASCII simultanément.
# Inspecter le contenu d'une requête HTTP
sudo tcpdump -i eth0 port 80 -A
# Analyse complète avec adresses MAC et contenu Hex/ASCII
sudo tcpdump -i eth0 -e -X
L'utilisation combinée de ces options permet de transformer Tcpdump d'un simple moniteur de trafic en un puissant outil de diagnostic et de sécurité réseau.