Capturer, analyser et monitorer le trafic réseau en temps réel sous Linux.
Sujets associés : Pile réseau — Vue d’ensemble, Paquets IP et TCP, TLS et SSL
tcpdump — capture de paquets en ligne de commande
tcpdump capture le trafic réseau. C’est l’outil de référence pour le débogage réseau.
Commandes de base
# Capturer sur toutes les interfaces
sudo tcpdump
# Capturer sur une interface spécifique
sudo tcpdump -i eth0
sudo tcpdump -i any # toutes les interfaces
# Capturer N paquets et s'arrêter
sudo tcpdump -i eth0 -c 100
# Afficher les adresses IP (sans résolution DNS, plus rapide)
sudo tcpdump -n -i eth0
# Mode verbeux (afficher plus de détails)
sudo tcpdump -v -i eth0 # verbosité 1
sudo tcpdump -vv -i eth0 # verbosité 2
sudo tcpdump -vvv -i eth0 # max
# Afficher le contenu des paquets en ASCII
sudo tcpdump -A -i eth0
# Afficher en hexadécimal + ASCII
sudo tcpdump -X -i eth0Sauvegarder et lire les captures
# Sauvegarder dans un fichier .pcap (lisible par Wireshark)
sudo tcpdump -i eth0 -w capture.pcap
# Sauvegarder avec rotation (100MB par fichier, 10 fichiers max)
sudo tcpdump -i eth0 -w capture-%Y%m%d-%H%M%S.pcap -C 100 -W 10
# Lire et afficher un fichier de capture
tcpdump -r capture.pcap
tcpdump -n -r capture.pcapFiltres (Berkeley Packet Filter — BPF)
# Filtrer par hôte (source ou destination)
sudo tcpdump -n host 192.168.1.50
sudo tcpdump -n src host 192.168.1.50 # seulement source
sudo tcpdump -n dst host 192.168.1.50 # seulement destination
# Filtrer par port
sudo tcpdump -n port 80
sudo tcpdump -n port 443
sudo tcpdump -n src port 80
sudo tcpdump -n dst port 443
# Filtrer par protocole
sudo tcpdump -n tcp
sudo tcpdump -n udp
sudo tcpdump -n icmp
sudo tcpdump -n arp
# Filtrer par réseau
sudo tcpdump -n net 192.168.1.0/24
# Combiner les filtres
sudo tcpdump -n "host 192.168.1.50 and port 443"
sudo tcpdump -n "tcp port 80 or tcp port 443"
sudo tcpdump -n "not port 22" # exclure SSH
sudo tcpdump -n "host 192.168.1.50 and not port 22"
# Filtrer les paquets SYN (début de connexion TCP)
sudo tcpdump -n "tcp[tcpflags] & tcp-syn != 0"
# Filtrer HTTP (port 80, méthode GET)
sudo tcpdump -n -A 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'Cas d’usage courants
# Surveiller le trafic DNS
sudo tcpdump -n -i any udp port 53
# Surveiller les connexions HTTP
sudo tcpdump -n -i any tcp port 80 -A
# Voir les handshakes TLS (sans le contenu chiffré)
sudo tcpdump -n -i any tcp port 443
# Surveiller tout le trafic d'une IP
sudo tcpdump -n host 203.0.113.5
# Capturer les requêtes ICMP (ping)
sudo tcpdump -n icmp
# Capturer vers Wireshark en temps réel (via SSH)
ssh utilisateur@serveur "sudo tcpdump -i eth0 -w -" | wireshark -k -i -iftop — bande passante par connexion (interactif)
iftop affiche l’utilisation de la bande passante par paire d’IP, en temps réel.
# Lancer sur une interface
sudo iftop -i eth0
# Sans résolution DNS (plus rapide)
sudo iftop -n -i eth0
# Filtrer par réseau
sudo iftop -i eth0 -F 192.168.1.0/24
# Touches interactives :
# n : activer/désactiver la résolution DNS
# p : afficher les ports
# P : pause
# s : afficher seulement la source
# d : afficher seulement la destination
# 1/2/3 : trier par colonne (2s, 10s, 40s)
# q : quitternethogs — bande passante par processus
nethogs groupe le trafic par processus (qui consomme la bande passante).
# Lancer sur une interface
sudo nethogs eth0
# Rafraîchissement toutes les 2 secondes
sudo nethogs -d 2 eth0
# Toutes les interfaces
sudo nethogs
# Touches interactives :
# m : changer l'unité (KB/s, MB/s, B)
# r : trier par reçu
# s : trier par envoyé
# q : quitteriperf3 — mesure de performance réseau
iperf3 mesure la bande passante disponible entre deux machines.
# Sur le serveur (écoute sur le port 5201)
iperf3 -s
# Sur le client (test vers le serveur)
iperf3 -c 192.168.1.50
# Durée du test (défaut : 10s)
iperf3 -c 192.168.1.50 -t 30
# Test UDP (par défaut c'est TCP)
iperf3 -c 192.168.1.50 -u
# Tester en parallèle (N flux simultanés)
iperf3 -c 192.168.1.50 -P 4
# Inverser le sens (upload du client vers serveur → test débit montant)
iperf3 -c 192.168.1.50 -R
# Taille des paquets
iperf3 -c 192.168.1.50 -l 64K
# Sortie JSON
iperf3 -c 192.168.1.50 -J | jq .end.sum_received.bits_per_secondnload — monitoring bande passante globale
# Afficher trafic entrant/sortant sur eth0
nload eth0
# Navigation : ← → pour changer d'interface
# Unité en Mbits/s
nload -u M eth0Statistiques réseau du système
# Statistiques globales des interfaces
cat /proc/net/dev
# Statistiques TCP (connexions actives, erreurs)
cat /proc/net/tcp
cat /proc/net/tcp6
# Compteurs réseau du noyau
netstat -s # résumé TCP/UDP/IP
ss -s # résumé plus rapide
# Trafic par interface (en octets)
ip -s link show eth0
# Bande passante en temps réel (sans outil tiers)
watch -n 1 'ip -s link show eth0'En relation avec
- Linux Réseau — Vue d’ensemble — index des commandes réseau Linux
- Ports et Sockets — voir quelles connexions sont actives
- Diagnostics réseau — ping, traceroute pour tester la connectivité
- Paquets IP et TCP — comprendre ce que tcpdump capture
- TLS et SSL — tcpdump voit le trafic chiffré mais pas le contenu