
Votre serveur est lent, mais vous ne savez pas pourquoi. Vos utilisateurs signalent des déconnexions aléatoires. Ou pire : vous suspectez une intrusion, mais vous n’avez aucune preuve. Comment voir ce qui transite réellement sur votre réseau ?
TCPDump est la réponse. Cet outil en ligne de commande capture et affiche les paquets réseau en temps réel, comme un stéthoscope pour votre infrastructure. En 10 minutes, vous saurez capturer du trafic, filtrer les données pertinentes, et identifier des comportements suspects.
Ce guide vous accompagne pas à pas : installation, premières captures, filtres essentiels, et cas d’usage en sécurité. Aucune connaissance préalable en analyse réseau n’est requise.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »À la fin de ce guide, vous saurez :
- Installer TCPDump sur Linux et macOS
- Capturer le trafic d’une interface réseau spécifique
- Filtrer les paquets par adresse IP, port, protocole
- Sauvegarder et relire des captures pour analyse ultérieure
- Détecter des menaces : scans de ports, attaques DoS, tentatives SSH
- Exporter vers Wireshark pour une analyse graphique approfondie
Qu’est-ce que TCPDump ? (et pourquoi c’est indispensable)
Section intitulée « Qu’est-ce que TCPDump ? (et pourquoi c’est indispensable) »Le problème que résout TCPDump
Section intitulée « Le problème que résout TCPDump »Quand quelque chose ne va pas sur un réseau, les logs applicatifs ne suffisent pas toujours. Ils vous disent ce que l’application a fait, mais pas ce qui s’est passé sur le câble. Exemples de situations où les logs sont muets :
| Problème | Ce que les logs disent | Ce que TCPDump révèle |
|---|---|---|
| Connexion lente | ”Timeout après 30s” | Le serveur met 5s à répondre au SYN |
| Échec d’authentification | ”Invalid credentials” | Les paquets n’arrivent même pas au serveur |
| Service inaccessible | ”Connection refused” | Un pare-feu bloque le trafic en amont |
| Fuite de données | Rien du tout | Trafic sortant suspect vers une IP inconnue |
TCPDump vous donne la vérité brute : ce qui entre et sort réellement de votre machine, paquet par paquet.
Comment fonctionne la capture de paquets
Section intitulée « Comment fonctionne la capture de paquets »Quand une machine envoie ou reçoit des données sur le réseau, elles transitent sous forme de paquets. Chaque paquet contient :
- L’en-tête : adresses IP source/destination, port, protocole, flags TCP…
- La charge utile (payload) : les données réelles (requête HTTP, contenu de fichier…)
Normalement, une interface réseau ne traite que les paquets qui lui sont destinés. TCPDump met l’interface en mode promiscuous (promiscuité), ce qui lui permet de capturer tout le trafic qui passe, y compris celui destiné à d’autres machines (sur un réseau non commuté).
TCPDump vs Wireshark : quand utiliser lequel ?
Section intitulée « TCPDump vs Wireshark : quand utiliser lequel ? »Les deux outils lisent le même format de fichier (.pcap), mais ont des usages différents :
| Critère | TCPDump | Wireshark |
|---|---|---|
| Interface | Ligne de commande | Graphique |
| Ressources | Léger (~500 KB) | Lourd (~100 MB) |
| Disponibilité | Pré-installé sur Linux | À installer |
| Usage serveur | ✅ Idéal (pas de GUI) | ❌ Nécessite un bureau |
| Analyse approfondie | Basique | Très avancée |
| Automatisation | ✅ Scripts bash | ❌ Manuel |
Workflow recommandé : Capturez avec TCPDump sur le serveur, puis analysez le fichier .pcap avec Wireshark sur votre poste.
Installation de TCPDump
Section intitulée « Installation de TCPDump »Vérifier si TCPDump est déjà installé
Section intitulée « Vérifier si TCPDump est déjà installé »Sur la plupart des distributions Linux, TCPDump est pré-installé. Vérifiez avec :
tcpdump --versionRésultat attendu :
tcpdump version 4.99.4libpcap version 1.10.4 (with TPACKET_V3)Si vous voyez command not found, passez à l’installation.
Installation selon votre système
Section intitulée « Installation selon votre système »sudo apt updatesudo apt install tcpdumpVérification :
tcpdump --versionsudo dnf install tcpdumpOu avec yum sur les anciennes versions :
sudo yum install tcpdumpTCPDump est inclus par défaut sur macOS. Si vous avez besoin d’une version plus récente :
brew install tcpdumpNote : Sur macOS, vous devrez peut-être autoriser l’accès au réseau dans les préférences de sécurité.
Lister les interfaces réseau disponibles
Section intitulée « Lister les interfaces réseau disponibles »Avant de capturer, identifiez l’interface à surveiller :
tcpdump -DExemple de sortie :
1.eth0 [Up, Running, Connected]2.any (Pseudo-device that captures on all interfaces) [Up, Running]3.lo [Up, Running, Loopback]4.docker0 [Up, Disconnected]5.virbr0 [Up, Disconnected]Explications :
| Interface | Description |
|---|---|
eth0 / enp0s3 | Interface Ethernet principale |
any | Capture sur toutes les interfaces |
lo | Loopback (trafic local, 127.0.0.1) |
docker0 | Bridge Docker |
wlan0 / wlo1 | Interface Wi-Fi |
Votre première capture TCPDump
Section intitulée « Votre première capture TCPDump »Capturer tout le trafic (déconseillé en production)
Section intitulée « Capturer tout le trafic (déconseillé en production) »La commande la plus simple :
sudo tcpdump -i eth0Pourquoi sudo ? La capture de paquets nécessite des privilèges root pour mettre l’interface en mode promiscuous.
Sortie (défile rapidement) :
15:42:01.234567 IP 192.168.1.100.22 > 192.168.1.50.51234: Flags [P.], seq 1:37, ack 1, win 501, length 3615:42:01.234890 IP 192.168.1.50.51234 > 192.168.1.100.22: Flags [.], ack 37, win 502, length 015:42:01.235123 IP 192.168.1.100.22 > 192.168.1.50.51234: Flags [P.], seq 37:101, ack 1, win 501, length 64Arrêter la capture : Ctrl + C
Comprendre la sortie de TCPDump
Section intitulée « Comprendre la sortie de TCPDump »La sortie de TCPDump peut sembler cryptique au premier abord, mais chaque élément a une signification précise. Apprendre à lire cette sortie vous permettra de diagnostiquer rapidement des problèmes réseau ou de repérer des comportements anormaux.
Décortiquons une ligne typique :
15:42:01.234567 IP 192.168.1.100.22 > 192.168.1.50.51234: Flags [P.], seq 1:37, ack 1, win 501, length 36Cette ligne nous indique qu’à 15h42, une machine (192.168.1.100) envoie 36 octets de données depuis son port 22 (SSH) vers une autre machine. Le flag [P.] signifie que les données doivent être transmises immédiatement (PUSH) et que le paquet précédent a été reçu (ACK).
| Élément | Signification |
|---|---|
15:42:01.234567 | Horodatage (heure:minute:seconde.microsecondes) |
IP | Protocole de couche réseau |
192.168.1.100.22 | IP source + port source (22 = SSH) |
> | Direction (source → destination) |
192.168.1.50.51234 | IP destination + port destination |
Flags [P.] | Flags TCP : P = PUSH, . = ACK |
seq 1:37 | Numéros de séquence (37 octets de données) |
ack 1 | Numéro d’acquittement |
win 501 | Taille de fenêtre TCP |
length 36 | Taille des données |
Les flags TCP essentiels
Section intitulée « Les flags TCP essentiels »Les flags TCP sont des indicateurs binaires dans l’en-tête de chaque paquet. Ils orchestrent le cycle de vie d’une connexion : ouverture, transmission, fermeture. Comprendre ces flags est crucial pour diagnostiquer des problèmes de connectivité ou détecter des attaques.
Par exemple, si vous voyez beaucoup de paquets [R] (RST), cela signifie que des connexions sont brutalement interrompues — peut-être un pare-feu qui bloque, ou un service qui refuse les connexions. Si vous voyez des [S] sans réponse [S.], le serveur distant ne répond pas.
| Flag | Symbole | Signification |
|---|---|---|
| SYN | [S] | Demande d’ouverture de connexion |
| ACK | [.] | Accusé de réception |
| FIN | [F] | Demande de fermeture |
| RST | [R] | Reset (fermeture brutale) |
| PUSH | [P] | Données à transmettre immédiatement |
| SYN-ACK | [S.] | Réponse à un SYN (2ème étape handshake) |
Exemple de handshake TCP (connexion normale) :
Options essentielles de TCPDump
Section intitulée « Options essentielles de TCPDump »TCPDump dispose de dizaines d’options, mais une poignée couvre 90% des besoins. Cette section présente les options que vous utiliserez quotidiennement, organisées par cas d’usage.
Contrôler le niveau de détail
Section intitulée « Contrôler le niveau de détail »Par défaut, TCPDump affiche un résumé minimaliste de chaque paquet. Pour investiguer un problème, vous aurez souvent besoin de plus d’informations : TTL (durée de vie du paquet), options TCP, checksums… Les options de verbosité vous permettent de choisir le niveau de détail adapté à votre analyse.
| Option | Effet | Exemple |
|---|---|---|
-v | Verbeux (TTL, checksum, ID) | tcpdump -v -i eth0 |
-vv | Très verbeux (options TCP complètes) | tcpdump -vv -i eth0 |
-vvv | Maximum de détails | tcpdump -vvv -i eth0 |
-q | Mode silencieux (moins de détails) | tcpdump -q -i eth0 |
Limiter la capture
Section intitulée « Limiter la capture »Sur un serveur en production, le trafic peut atteindre des milliers de paquets par seconde. Sans limitation, votre capture devient inexploitable — fichiers de plusieurs gigaoctets, terminal qui défile trop vite pour être lu. Ces options vous permettent de contrôler le volume de données capturées.
| Option | Effet | Exemple |
|---|---|---|
-c N | Arrêter après N paquets | tcpdump -c 100 -i eth0 |
-s N | Capturer N octets par paquet (0 = tout) | tcpdump -s 0 -i eth0 |
Astuce : Par défaut, TCPDump capture seulement les 262144 premiers octets de chaque paquet. Pour capturer le contenu complet (utile pour l’analyse HTTP) :
sudo tcpdump -s 0 -i eth0Afficher le contenu des paquets
Section intitulée « Afficher le contenu des paquets »Jusqu’ici, nous n’avons vu que les en-têtes des paquets (IP source, destination, port…). Mais parfois, vous avez besoin de voir le contenu : une requête HTTP mal formée, des credentials envoyés en clair, ou le payload d’une attaque. Ces options affichent les données transportées dans chaque paquet.
| Option | Effet | Utilité |
|---|---|---|
-X | Hexadécimal + ASCII | Voir le contenu brut |
-A | ASCII uniquement | Lire les requêtes HTTP |
-xx | Inclut les en-têtes Ethernet | Analyse bas niveau |
Exemple : voir une requête HTTP en clair :
sudo tcpdump -A -i eth0 port 80Sortie :
GET /index.html HTTP/1.1Host: example.comUser-Agent: curl/7.68.0Accept: */*Désactiver la résolution DNS
Section intitulée « Désactiver la résolution DNS »Par défaut, TCPDump tente de résoudre les adresses IP en noms DNS, ce qui ralentit l’affichage :
# Avec résolution (lent)sudo tcpdump -i eth0
# Sans résolution (rapide)sudo tcpdump -n -i eth0
# Sans résolution IP ni port (très rapide)sudo tcpdump -nn -i eth0Recommandation : utilisez toujours -nn pour des captures en temps réel.
Filtrer le trafic avec les expressions BPF
Section intitulée « Filtrer le trafic avec les expressions BPF »Les filtres sont la vraie puissance de TCPDump. Sans filtre, vous êtes noyé sous les données. Avec les bons filtres, vous ciblez exactement ce que vous cherchez.
Filtrer par adresse IP
Section intitulée « Filtrer par adresse IP »Le filtre le plus courant : isoler le trafic d’une machine spécifique. Utile pour suivre les communications d’un serveur suspect, analyser les échanges avec un client particulier, ou exclure le bruit du trafic général.
# Tout le trafic vers/depuis une IPsudo tcpdump -nn -i eth0 host 192.168.1.100
# Uniquement le trafic DEPUIS cette IPsudo tcpdump -nn -i eth0 src 192.168.1.100
# Uniquement le trafic VERS cette IPsudo tcpdump -nn -i eth0 dst 192.168.1.100
# Trafic d'un sous-réseau entiersudo tcpdump -nn -i eth0 net 192.168.1.0/24Filtrer par port
Section intitulée « Filtrer par port »Filtrer par port permet d’isoler un service spécifique : le trafic web (80/443), SSH (22), DNS (53), bases de données (3306, 5432)… C’est particulièrement utile quand vous débuggez un service précis sans être parasité par le reste du trafic.
# Tout le trafic sur le port 80 (HTTP)sudo tcpdump -nn -i eth0 port 80
# Ports source ou destination spécifiquessudo tcpdump -nn -i eth0 src port 22sudo tcpdump -nn -i eth0 dst port 443
# Plage de portssudo tcpdump -nn -i eth0 portrange 8000-8080Filtrer par protocole
Section intitulée « Filtrer par protocole »Chaque protocole a ses caractéristiques : TCP pour les connexions fiables (HTTP, SSH), UDP pour le temps réel (DNS, VoIP), ICMP pour le diagnostic (ping, traceroute), ARP pour la résolution d’adresses. Filtrer par protocole vous permet de cibler la couche réseau pertinente pour votre analyse.
# Uniquement TCPsudo tcpdump -nn -i eth0 tcp
# Uniquement UDPsudo tcpdump -nn -i eth0 udp
# Uniquement ICMP (ping)sudo tcpdump -nn -i eth0 icmp
# Uniquement ARPsudo tcpdump -nn -i eth0 arpCombiner les filtres
Section intitulée « Combiner les filtres »La vraie puissance des filtres BPF vient de leur combinaison. Avec les opérateurs logiques and, or, et not, vous pouvez construire des requêtes précises : “le trafic HTTP depuis cette IP”, “tout sauf mon trafic SSH”, “les connexions vers les ports 80 ou 443 depuis ce sous-réseau”. Plus votre filtre est précis, moins vous avez de bruit à trier.
# Trafic HTTP depuis une IP spécifiquesudo tcpdump -nn -i eth0 src 192.168.1.100 and port 80
# Trafic SSH ou HTTPSsudo tcpdump -nn -i eth0 port 22 or port 443
# Tout sauf le trafic SSH (exclure votre propre connexion)sudo tcpdump -nn -i eth0 not port 22
# Combinaison complexe avec parenthèsessudo tcpdump -nn -i eth0 'host 192.168.1.100 and (port 80 or port 443)'Filtres avancés sur les flags TCP
Section intitulée « Filtres avancés sur les flags TCP »Les filtres sur les flags TCP sont essentiels pour la sécurité. En ciblant les paquets SYN (début de connexion), vous pouvez détecter des scans de ports. En surveillant les RST, vous identifiez les connexions refusées. Cette syntaxe utilise la notation d’accès aux octets (tcp[13]) pour lire directement le byte des flags dans l’en-tête TCP.
# Paquets SYN (début de connexion)sudo tcpdump -nn -i eth0 'tcp[tcpflags] & tcp-syn != 0'
# Paquets SYN sans ACK (première étape du handshake)sudo tcpdump -nn -i eth0 'tcp[13] == 2'
# Paquets RST (connexions refusées/interrompues)sudo tcpdump -nn -i eth0 'tcp[tcpflags] & tcp-rst != 0'
# Paquets FIN (fermetures normales)sudo tcpdump -nn -i eth0 'tcp[tcpflags] & tcp-fin != 0'Explication : tcp[13] représente l’octet 13 de l’en-tête TCP (les flags). La valeur 2 correspond à SYN seul.
Sauvegarder et relire des captures
Section intitulée « Sauvegarder et relire des captures »Sauvegarder dans un fichier PCAP
Section intitulée « Sauvegarder dans un fichier PCAP »La capture en direct est utile pour le diagnostic immédiat, mais pour une analyse approfondie ou pour partager avec un collègue, vous aurez besoin d’un fichier. Le format PCAP (Packet Capture) est le standard de l’industrie : Wireshark, tshark, Zeek, Suricata — tous les outils le lisent. Sauvegarder une capture vous permet aussi de rejouer une situation problématique autant de fois que nécessaire.
# Sauvegarder la capturesudo tcpdump -nn -i eth0 -w capture.pcap
# Avec un filtre (ne sauvegarder que le trafic HTTP)sudo tcpdump -nn -i eth0 port 80 -w http_traffic.pcap
# Limiter la taille du fichier (100 paquets max)sudo tcpdump -nn -i eth0 -c 100 -w short_capture.pcapLe fichier .pcap est au format standard PCAP (Packet Capture), lisible par tous les outils d’analyse réseau : Wireshark, tshark, NetworkMiner…
Relire un fichier de capture
Section intitulée « Relire un fichier de capture »Une fois le fichier PCAP créé, vous pouvez le relire autant de fois que nécessaire, appliquer différents filtres, ou l’ouvrir dans Wireshark pour une analyse graphique. C’est aussi utile pour partager une capture avec un collègue qui n’a pas accès au serveur, ou pour documenter un incident de sécurité.
# Lire et afficher tout le contenutcpdump -nn -r capture.pcap
# Appliquer un filtre sur le fichier existanttcpdump -nn -r capture.pcap port 443
# Afficher avec les données ASCIItcpdump -A -r capture.pcapPas besoin de sudo pour lire un fichier — seulement pour capturer en direct.
Rotation automatique des fichiers
Section intitulée « Rotation automatique des fichiers »Sur un serveur de production, capturer pendant plusieurs heures peut générer des fichiers de dizaines de gigaoctets — impossible à analyser, et risque de saturer le disque. La rotation automatique résout ce problème : TCPDump crée un nouveau fichier à intervalles réguliers (par taille ou par temps), et peut même supprimer automatiquement les plus anciens. C’est essentiel pour la surveillance continue ou la capture d’incidents rares.
# Nouveau fichier tous les 100 Mo (-C 100)sudo tcpdump -nn -i eth0 -w capture.pcap -C 100
# Garder seulement les 5 derniers fichiers (-W 5)sudo tcpdump -nn -i eth0 -w capture.pcap -C 100 -W 5
# Nouveau fichier toutes les 60 secondes (-G 60)sudo tcpdump -nn -i eth0 -w 'capture_%Y%m%d_%H%M%S.pcap' -G 60Résultat avec -G 60 :
capture_20260112_154200.pcapcapture_20260112_154300.pcapcapture_20260112_154400.pcapCas d’usage sécurité : détecter les menaces
Section intitulée « Cas d’usage sécurité : détecter les menaces »TCPDump est un outil précieux pour la détection d’intrusions. Voici les scénarios les plus courants.
Détecter les scans de ports
Section intitulée « Détecter les scans de ports »Un scan de port se caractérise par de nombreux paquets SYN vers différents ports depuis une même IP :
# Capturer les paquets SYN sur les ports privilégiés (1-1024)sudo tcpdump -nn -i eth0 'tcp[13] == 2 and portrange 1-1024'Signe d’un scan : Si vous voyez des dizaines de paquets SYN vers des ports différents en quelques secondes, c’est probablement un scan.
Détecter les attaques brute-force SSH
Section intitulée « Détecter les attaques brute-force SSH »Les attaques par dictionnaire sur SSH génèrent beaucoup de connexions sur le port 22 :
# Capturer les tentatives de connexion SSH (SYN vers port 22)sudo tcpdump -nn -i eth0 'dst port 22 and tcp[13] == 2'Signe d’attaque : Plus de 10 connexions par minute depuis une même IP.
Script de comptage :
# Compter les tentatives par IP sourcesudo tcpdump -nn -i eth0 -c 1000 'dst port 22 and tcp[13] == 2' 2>/dev/null | \ awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -rnSortie :
847 10.0.0.50 12 192.168.1.25 3 192.168.1.1→ L’IP 10.0.0.50 a tenté 847 connexions : c’est une attaque brute-force.
Détecter les attaques DDoS par ICMP (ping flood)
Section intitulée « Détecter les attaques DDoS par ICMP (ping flood) »# Capturer le trafic ICMPsudo tcpdump -nn -i eth0 icmpSigne d’attaque : Volume anormal de paquets ICMP Echo Request (type 8).
Compter les pings par seconde :
sudo tcpdump -nn -i eth0 'icmp[icmptype] == 8' 2>/dev/null | \ pv -l -i 1 -r > /dev/nullSurveiller le trafic DNS (exfiltration, tunneling)
Section intitulée « Surveiller le trafic DNS (exfiltration, tunneling) »Le DNS (port 53) est souvent utilisé pour l’exfiltration de données car il est rarement bloqué :
# Tout le trafic DNSsudo tcpdump -nn -i eth0 port 53
# Voir le contenu des requêtes DNSsudo tcpdump -nn -i eth0 -A port 53Signes suspects :
- Requêtes vers des domaines inhabituels
- Sous-domaines très longs (encodage de données)
- Volume anormal de requêtes DNS
Exemple de DNS tunneling (exfiltration de données) :
bXlzZWNyZXRkYXRh.evil-domain.com # Données encodées en base64 dans le sous-domaineDétecter les connexions sortantes suspectes
Section intitulée « Détecter les connexions sortantes suspectes »Vérifiez si une machine compromise communique vers l’extérieur :
# Connexions sortantes vers des ports inhabituelssudo tcpdump -nn -i eth0 'src net 192.168.1.0/24 and dst port 4444'
# Trafic sortant non HTTP/HTTPSsudo tcpdump -nn -i eth0 'src net 192.168.1.0/24 and not (dst port 80 or dst port 443 or dst port 53)'Le port 4444 est souvent utilisé par des outils de post-exploitation (Metasploit, reverse shells).
Exemples pratiques prêts à l’emploi
Section intitulée « Exemples pratiques prêts à l’emploi »Voici des commandes TCPDump prêtes à copier-coller pour les situations les plus courantes. Chaque exemple résout un problème concret que vous rencontrerez en production.
Diagnostiquer un problème de connexion web
Section intitulée « Diagnostiquer un problème de connexion web »Un utilisateur signale qu’une page ne se charge pas. Cette commande vous montre exactement ce que le serveur reçoit et renvoie — requête HTTP, headers, éventuelles erreurs.
# Voir les requêtes HTTP vers un serveur spécifiquesudo tcpdump -nn -A -i eth0 'host example.com and port 80'Capturer le trafic d’un conteneur Docker
Section intitulée « Capturer le trafic d’un conteneur Docker »Débugger le réseau d’un conteneur Docker peut être frustrant car le trafic passe par des interfaces virtuelles. Cette approche capture le trafic sur le bridge Docker pour voir les communications entre conteneurs ou vers l’extérieur.
# Trouver l'interface du conteneurdocker inspect -f '{{.NetworkSettings.Networks.bridge.NetworkID}}' mon_conteneur
# Capturer sur le bridge Dockersudo tcpdump -nn -i docker0 'host 172.17.0.2'Exporter pour analyse Wireshark
Section intitulée « Exporter pour analyse Wireshark »Pour une analyse approfondie avec décodage complet des protocoles, filtres avancés et visualisation graphique, exportez votre capture vers Wireshark. L’option -s 0 garantit que tout le contenu des paquets est capturé, pas seulement les en-têtes.
# Capture complète (tous les octets, toutes les interfaces pertinentes)sudo tcpdump -nn -s 0 -i eth0 -w analyse_complete.pcap
# Puis ouvrir dans Wiresharkwireshark analyse_complete.pcapCapturer uniquement les erreurs réseau
Section intitulée « Capturer uniquement les erreurs réseau »Quand vous cherchez pourquoi des connexions échouent, filtrez directement sur les paquets d’erreur. Les RST indiquent des connexions refusées ou interrompues ; les ICMP type 3 signalent des destinations inaccessibles (port fermé, hôte down, réseau injoignable).
# Paquets RST (connexions refusées)sudo tcpdump -nn -i eth0 'tcp[tcpflags] & tcp-rst != 0'
# ICMP "destination unreachable"sudo tcpdump -nn -i eth0 'icmp[icmptype] == 3'Dépannage des problèmes courants
Section intitulée « Dépannage des problèmes courants »”permission denied” ou “Operation not permitted”
Section intitulée « ”permission denied” ou “Operation not permitted” »Cause : Vous n’avez pas les droits root.
Solution :
# Utiliser sudosudo tcpdump -i eth0
# Ou ajouter la capability (permanent)sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/tcpdump“No suitable device found”
Section intitulée « “No suitable device found” »Cause : L’interface n’existe pas ou est mal orthographiée.
Solution :
# Lister les interfaces disponiblestcpdump -D
# Vérifier le nom exactip link showLa capture ne montre rien
Section intitulée « La capture ne montre rien »Causes possibles :
- Pas de trafic sur cette interface → essayez
any - Filtre trop restrictif → simplifiez-le
- Firewall bloque en amont → vérifiez avec
iptables -L
Debug :
# Capturer sans filtre d'abordsudo tcpdump -nn -i any -c 10Le fichier PCAP est trop gros
Section intitulée « Le fichier PCAP est trop gros »Solution : Utilisez la rotation automatique :
# Max 50 Mo par fichier, 10 fichiers maxsudo tcpdump -nn -i eth0 -w capture.pcap -C 50 -W 10À retenir
Section intitulée « À retenir »-
TCPDump = stéthoscope réseau — Capture et affiche les paquets en temps réel pour diagnostiquer ou sécuriser.
-
Toujours utiliser
-nn— Désactive la résolution DNS pour des captures rapides et lisibles. -
Les filtres BPF sont essentiels — Sans filtre, vous êtes noyé. Avec
host,port,tcp,and,or, vous ciblez précisément. -
Sauvegarder en
.pcap— Capturez avec-w, analysez avec-rou Wireshark. Le fichier est la preuve. -
Les flags TCP racontent l’histoire —
[S]= début,[.]= OK,[R]= problème,[F]= fin. -
Pour la sécurité : surveillez les SYN —
tcp[13] == 2capture les débuts de connexion, révélant scans et attaques.
Checklist
Section intitulée « Checklist »Installation et configuration
Section intitulée « Installation et configuration »- TCPDump installé (
tcpdump --version) - Interfaces listées (
tcpdump -D) - Interface principale identifiée (eth0, enp0s3…)
Captures de base
Section intitulée « Captures de base »- Première capture réussie (
sudo tcpdump -nn -c 10 -i eth0) - Sauvegarde en fichier testée (
-w capture.pcap) - Relecture de fichier testée (
tcpdump -r capture.pcap)
Filtres essentiels maîtrisés
Section intitulée « Filtres essentiels maîtrisés »- Filtre par IP (
host,src,dst) - Filtre par port (
port,portrange) - Filtre par protocole (
tcp,udp,icmp) - Combinaisons (
and,or,not)
Sécurité
Section intitulée « Sécurité »- Détection de scan de ports testée
- Surveillance SSH configurée
- Rotation des fichiers activée pour captures longues
Prochaines étapes
Section intitulée « Prochaines étapes »Ressources complémentaires
Section intitulée « Ressources complémentaires »- Page man officielle :
man tcpdump - Documentation libpcap : tcpdump.org
- Filtres BPF complets : biot.com/capstats/bpf.html
- Wireshark : wireshark.org pour l’analyse graphique
Questions fréquentes
Section intitulée « Questions fréquentes »TCPDump est un outil en ligne de commande qui capture et affiche les paquets réseau en temps réel. C'est comme un stéthoscope pour votre réseau : il vous permet de voir exactement ce qui entre et sort de votre machine.
Analogie simple
Imaginez une autoroute avec des voitures (les paquets). TCPDump, c'est une caméra de surveillance qui filme tout le trafic. Vous pouvez ensuite filtrer pour ne voir que les camions (HTTP), les voitures rouges (une IP spécifique), ou celles qui roulent trop vite (comportements suspects).
Caractéristiques principales
| Aspect | Description |
|---|---|
| Type | Analyseur de paquets (sniffer) |
| Interface | Ligne de commande |
| Format | PCAP (standard industrie) |
| Disponibilité | Pré-installé sur la plupart des Linux |
| Droits requis | root (sudo) |
Cas d'usage typiques
- Diagnostic réseau : pourquoi cette connexion échoue-t-elle ?
- Sécurité : détecter des scans de ports, des intrusions
- Debugging : voir les requêtes HTTP/API en clair
- Forensic : analyser un incident de sécurité après coup
TCPDump et Wireshark sont deux outils d'analyse réseau complémentaires. L'un est en ligne de commande, l'autre est graphique.
Comparaison détaillée
| Aspect | TCPDump | Wireshark |
|---|---|---|
| Interface | Ligne de commande | Graphique (GUI) |
| Taille | ~500 KB | ~100 MB |
| Disponibilité | Pré-installé Linux | À installer |
| Usage serveur | ✅ Idéal (pas de GUI) | ❌ Nécessite un bureau |
| Analyse avancée | Basique | Très détaillée |
| Décodage protocoles | Limité | Complet (1000+ protocoles) |
| Automatisation | ✅ Scripts bash | ❌ Manuel |
| Courbe apprentissage | Moyenne | Plus douce (visuel) |
Quand utiliser TCPDump ?
- Capture sur un serveur distant sans interface graphique
- Automatisation dans des scripts
- Capture légère avec peu de ressources
- Premiers diagnostics rapides
Quand utiliser Wireshark ?
- Analyse approfondie avec décodage complet
- Visualisation graphique des flux
- Filtres complexes avec autocomplétion
- Formation et apprentissage
Workflow recommandé
# 1. Capturer sur le serveur avec TCPDump
sudo tcpdump -nn -s 0 -i eth0 -w capture.pcap
# 2. Transférer le fichier sur votre poste
scp user@serveur:capture.pcap .
# 3. Analyser avec Wireshark
wireshark capture.pcap
Les deux outils utilisent le même format PCAP — ils sont parfaitement compatibles.
TCPDump nécessite des privilèges root car il met l'interface réseau en mode promiscuous (promiscuité), ce qui est une opération sensible au niveau du système.
Qu'est-ce que le mode promiscuous ?
Normalement, une carte réseau ne traite que les paquets qui lui sont destinés. En mode promiscuous, elle capture tous les paquets qui passent sur le réseau, y compris ceux destinés à d'autres machines.
Mode normal :
Paquet pour moi → Traité ✅
Paquet pour autre → Ignoré ❌
Mode promiscuous :
Paquet pour moi → Traité ✅
Paquet pour autre → Traité aussi ✅
Risques de sécurité
C'est pourquoi cette capacité est réservée à root :
- Capture de mots de passe en clair (HTTP, FTP, telnet)
- Espionnage des communications d'autres utilisateurs
- Capture de données sensibles (cookies, tokens)
Alternatives à sudo
# Solution 1 : Ajouter la capability (permanent)
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/tcpdump
# Maintenant, pas besoin de sudo
tcpdump -i eth0
# Solution 2 : Ajouter l'utilisateur au groupe (certaines distros)
sudo usermod -aG tcpdump $USER
# Se déconnecter/reconnecter
⚠️ Attention : ces solutions donnent des privilèges élevés. À utiliser uniquement sur vos propres machines.
Pour capturer le trafic HTTP (port 80) ou HTTPS (port 443), utilisez les filtres de port.
Capture HTTP simple
# Trafic HTTP (port 80)
sudo tcpdump -nn -i eth0 port 80
# Avec contenu lisible (requêtes/réponses)
sudo tcpdump -nn -A -i eth0 port 80
Capture HTTPS
# Trafic HTTPS (port 443)
sudo tcpdump -nn -i eth0 port 443
⚠️ Note : le contenu HTTPS est chiffré. Vous verrez les connexions, mais pas les données.
HTTP et HTTPS combinés
# Les deux ports
sudo tcpdump -nn -i eth0 'port 80 or port 443'
Vers un serveur spécifique
# HTTP vers example.com
sudo tcpdump -nn -A -i eth0 'host example.com and port 80'
# Avec résolution DNS (plus lent)
sudo tcpdump -i eth0 'host example.com and port 80'
Exemple de sortie HTTP
GET /api/users HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJhbGci...
Content-Type: application/json
Sauvegarder pour Wireshark
# Capture complète pour analyse détaillée
sudo tcpdump -nn -s 0 -i eth0 'port 80 or port 443' -w http_traffic.pcap
TCPDump propose plusieurs façons de filtrer par adresse IP : source, destination, ou les deux.
Filtres de base
# Tout le trafic vers/depuis une IP
sudo tcpdump -nn -i eth0 host 192.168.1.100
# Uniquement le trafic DEPUIS cette IP (source)
sudo tcpdump -nn -i eth0 src 192.168.1.100
# Uniquement le trafic VERS cette IP (destination)
sudo tcpdump -nn -i eth0 dst 192.168.1.100
Filtrer un sous-réseau entier
# Tout le sous-réseau 192.168.1.0/24
sudo tcpdump -nn -i eth0 net 192.168.1.0/24
# Source depuis ce sous-réseau
sudo tcpdump -nn -i eth0 src net 10.0.0.0/8
Combinaisons utiles
# Trafic entre deux IPs spécifiques
sudo tcpdump -nn -i eth0 'host 192.168.1.100 and host 192.168.1.200'
# IP spécifique sur un port précis
sudo tcpdump -nn -i eth0 'host 192.168.1.100 and port 22'
# Exclure une IP (ex: votre SSH)
sudo tcpdump -nn -i eth0 'not host 192.168.1.50'
# Plusieurs IPs avec OR
sudo tcpdump -nn -i eth0 'host 192.168.1.100 or host 192.168.1.101'
Exclure votre propre connexion SSH
Si vous êtes connecté en SSH, votre trafic SSH "pollue" la capture :
# Exclure le port 22
sudo tcpdump -nn -i eth0 'not port 22'
# Exclure votre IP client SSH
sudo tcpdump -nn -i eth0 'not host 10.0.0.50'
TCPDump peut enregistrer les paquets dans un fichier PCAP pour analyse ultérieure avec -w.
Sauvegarde simple
# Sauvegarder tous les paquets
sudo tcpdump -nn -i eth0 -w capture.pcap
# Avec un filtre (seulement HTTP)
sudo tcpdump -nn -i eth0 port 80 -w http.pcap
# Limiter à 1000 paquets
sudo tcpdump -nn -i eth0 -c 1000 -w capture.pcap
Capturer tout le contenu des paquets
# Par défaut, TCPDump tronque les paquets
# -s 0 capture tout le contenu
sudo tcpdump -nn -s 0 -i eth0 -w capture_complete.pcap
Rotation automatique (captures longues)
# Nouveau fichier tous les 100 Mo
sudo tcpdump -nn -i eth0 -w capture.pcap -C 100
# Crée : capture.pcap, capture.pcap1, capture.pcap2...
# Garder seulement les 5 derniers fichiers
sudo tcpdump -nn -i eth0 -w capture.pcap -C 100 -W 5
# Nouveau fichier toutes les heures
sudo tcpdump -nn -i eth0 -w 'capture_%Y%m%d_%H%M.pcap' -G 3600
Relire un fichier
# Afficher le contenu
tcpdump -nn -r capture.pcap
# Appliquer un filtre sur le fichier
tcpdump -nn -r capture.pcap port 443
# Avec contenu ASCII
tcpdump -A -r capture.pcap
Format PCAP
Le format PCAP (Packet Capture) est le standard de l'industrie. Ces fichiers peuvent être ouverts par :
- Wireshark : analyse graphique détaillée
- tshark : Wireshark en ligne de commande
- Zeek/Bro : analyse de sécurité
- Suricata : détection d'intrusion
Un scan de ports se caractérise par de nombreux paquets SYN vers différents ports depuis une même IP source en peu de temps.
Capturer les paquets SYN
# Tous les paquets SYN (début de connexion)
sudo tcpdump -nn -i eth0 'tcp[13] == 2'
# SYN vers les ports privilégiés (1-1024)
sudo tcpdump -nn -i eth0 'tcp[13] == 2 and portrange 1-1024'
Reconnaître un scan
Trafic normal (quelques connexions espacées) :
15:42:01.001 IP 10.0.0.50.45678 > 192.168.1.100.80: Flags [S]
15:42:05.234 IP 10.0.0.51.51234 > 192.168.1.100.443: Flags [S]
Scan de ports (beaucoup de SYN rapides vers des ports différents) :
15:42:01.001 IP 10.0.0.50.45678 > 192.168.1.100.21: Flags [S]
15:42:01.002 IP 10.0.0.50.45679 > 192.168.1.100.22: Flags [S]
15:42:01.003 IP 10.0.0.50.45680 > 192.168.1.100.23: Flags [S]
15:42:01.004 IP 10.0.0.50.45681 > 192.168.1.100.25: Flags [S]
15:42:01.005 IP 10.0.0.50.45682 > 192.168.1.100.80: Flags [S]
→ 5 ports différents en 5 ms depuis la même IP = scan évident.
Script de comptage
# Compter les SYN par IP source
sudo tcpdump -nn -i eth0 -c 1000 'tcp[13] == 2' 2>/dev/null | \
awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -rn
Sortie :
847 10.0.0.50 ← Suspect !
12 192.168.1.25
3 192.168.1.1
Actions à prendre
Si vous détectez un scan :
- Bloquer l'IP avec iptables/firewalld
- Signaler si c'est une IP externe
- Analyser les logs pour voir si d'autres services ont été touchés
Une attaque brute-force SSH se caractérise par de nombreuses tentatives de connexion sur le port 22 depuis une même IP en peu de temps.
Capturer les tentatives SSH
# Tous les SYN vers le port 22
sudo tcpdump -nn -i eth0 'dst port 22 and tcp[13] == 2'
Reconnaître une attaque
Trafic normal :
15:42:01 IP 192.168.1.50.51234 > 192.168.1.100.22: Flags [S]
15:47:23 IP 192.168.1.51.48765 > 192.168.1.100.22: Flags [S]
→ 2 connexions en 5 minutes = normal.
Attaque brute-force :
15:42:01.001 IP 10.0.0.50.45678 > 192.168.1.100.22: Flags [S]
15:42:01.234 IP 10.0.0.50.45679 > 192.168.1.100.22: Flags [S]
15:42:01.456 IP 10.0.0.50.45680 > 192.168.1.100.22: Flags [S]
15:42:01.678 IP 10.0.0.50.45681 > 192.168.1.100.22: Flags [S]
...
→ 4+ connexions par seconde depuis la même IP = attaque.
Script de détection
# Compter les tentatives par IP (1000 paquets)
sudo tcpdump -nn -i eth0 -c 1000 'dst port 22 and tcp[13] == 2' 2>/dev/null | \
awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -rn
Résultat suspect :
892 10.0.0.50 ← Attaquant probable
5 192.168.1.25
2 192.168.1.1
Protection
# Bloquer l'IP attaquante
sudo iptables -A INPUT -s 10.0.0.50 -j DROP
# Ou avec firewalld
sudo firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.50 reject'
Outils complémentaires
- fail2ban : bloque automatiquement après X échecs
- sshguard : protection en temps réel
- Suricata : IDS avec règles de détection
Les flags TCP sont des indicateurs qui orchestrent le cycle de vie d'une connexion. Comprendre ces flags est essentiel pour diagnostiquer des problèmes réseau.
Tableau des flags
| Flag | Symbole TCPDump | Signification | Quand l'utilise-t-on ? |
|---|---|---|---|
| SYN | [S] |
Synchronize | Demande d'ouverture de connexion |
| ACK | [.] |
Acknowledge | Accusé de réception |
| SYN-ACK | [S.] |
SYN + ACK | Réponse positive à un SYN |
| PUSH | [P] |
Push | Données à transmettre immédiatement |
| FIN | [F] |
Finish | Demande de fermeture propre |
| RST | [R] |
Reset | Fermeture brutale / refus |
| URG | [U] |
Urgent | Données urgentes (rare) |
Le handshake TCP (connexion normale)
1. Client → Serveur : [S] # "Je veux me connecter"
2. Serveur → Client : [S.] # "OK, j'accepte"
3. Client → Serveur : [.] # "Connexion établie"
4. ... échange de données [P.] ...
5. Client → Serveur : [F.] # "Je veux fermer"
6. Serveur → Client : [F.] # "Moi aussi, au revoir"
Diagnostics basés sur les flags
| Vous voyez | Signification |
|---|---|
[S] sans [S.] |
Serveur ne répond pas (down, firewall) |
Beaucoup de [R] |
Connexions refusées (port fermé) |
[S] répétés vers même port |
Probable scan de ports |
[R] après [S.] |
Client refuse la connexion |
Pas de [F], juste [R] |
Fermetures anormales |
Filtrer par flag
# Tous les SYN
sudo tcpdump -nn -i eth0 'tcp[13] == 2'
# Tous les RST (problèmes)
sudo tcpdump -nn -i eth0 'tcp[tcpflags] & tcp-rst != 0'
# Tous les FIN (fermetures)
sudo tcpdump -nn -i eth0 'tcp[tcpflags] & tcp-fin != 0'
L'erreur "permission denied" ou "Operation not permitted" signifie que vous n'avez pas les droits pour capturer le trafic réseau.
Solution 1 : Utiliser sudo (recommandé)
# Au lieu de
tcpdump -i eth0 # ❌ Permission denied
# Utilisez
sudo tcpdump -i eth0 # ✅
Solution 2 : Ajouter les capabilities (permanent)
Si vous voulez éviter sudo à chaque fois :
# Donner les capabilities à TCPDump
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/tcpdump
# Vérifier
getcap /usr/bin/tcpdump
# Affiche : /usr/bin/tcpdump = cap_net_admin,cap_net_raw+eip
# Maintenant ça marche sans sudo
tcpdump -i eth0
⚠️ Attention : cette solution donne des privilèges élevés. À utiliser sur vos propres machines.
Solution 3 : Groupe tcpdump (certaines distros)
# Voir si le groupe existe
getent group tcpdump
# Ajouter votre utilisateur
sudo usermod -aG tcpdump $USER
# Se déconnecter et reconnecter
logout
Solution 4 : Lire un fichier existant
Pour relire un fichier PCAP, pas besoin de sudo :
# Relecture sans privilèges
tcpdump -r capture.pcap # ✅ Fonctionne
# Seule la capture en direct nécessite root
sudo tcpdump -i eth0 -w capture.pcap # Capture
tcpdump -r capture.pcap # Relecture
L'erreur "No suitable device found" signifie que TCPDump ne trouve pas l'interface réseau spécifiée.
Causes et solutions
1. Nom d'interface incorrect
# ❌ L'interface n'existe pas
sudo tcpdump -i eth0
# tcpdump: eth0: No such device exists
# ✅ Lister les interfaces disponibles
tcpdump -D
# 1.enp0s3 [Up, Running]
# 2.lo [Up, Running, Loopback]
# 3.docker0 [Up]
# ✅ Utiliser le bon nom
sudo tcpdump -i enp0s3
2. Interface down
# Vérifier l'état de l'interface
ip link show
# Si l'interface est DOWN
sudo ip link set eth0 up
3. Utiliser 'any' pour capturer partout
# Capture sur toutes les interfaces
sudo tcpdump -i any
Trouver le bon nom d'interface
Les noms d'interface varient selon les distributions :
| Distribution | Ancien nom | Nouveau nom |
|---|---|---|
| Ubuntu/Debian | eth0 | enp0s3, ens33 |
| CentOS/RHEL | eth0 | enp0s3, ens192 |
| macOS | en0 | en0 |
# Linux : lister les interfaces
ip link show
ip addr show
# Ou avec ifconfig (si installé)
ifconfig -a
# macOS
networksetup -listallhardwareports
Vérifier avec TCPDump
# Liste complète des interfaces capturables
tcpdump -D
Quand vous êtes connecté en SSH à un serveur et que vous lancez TCPDump, votre propre trafic SSH "pollue" la capture. Voici comment l'exclure.
Exclure le port SSH
# Méthode simple : exclure le port 22
sudo tcpdump -nn -i eth0 'not port 22'
Exclure votre IP client
# Trouver votre IP (celle d'où vous vous connectez)
who am i
# user pts/0 2026-01-12 15:30 (10.0.0.50)
# Exclure cette IP
sudo tcpdump -nn -i eth0 'not host 10.0.0.50'
Combinaison plus précise
# Exclure uniquement VOTRE connexion SSH
sudo tcpdump -nn -i eth0 'not (host 10.0.0.50 and port 22)'
# Garder le SSH des autres, exclure le vôtre
sudo tcpdump -nn -i eth0 'not (src 10.0.0.50 and dst port 22)'
Avec d'autres filtres
# Capturer HTTP en excluant votre SSH
sudo tcpdump -nn -i eth0 'port 80 and not port 22'
# Tout le trafic d'un serveur, sauf votre SSH
sudo tcpdump -nn -i eth0 'host 192.168.1.100 and not (host 10.0.0.50 and port 22)'
Alternative : capturer dans un fichier
# Capturer tout, filtrer après
sudo tcpdump -nn -i eth0 -w capture.pcap
# Relire en excluant SSH
tcpdump -nn -r capture.pcap 'not port 22'