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 eth0

Sauvegarder 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.pcap

Filtres (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  : quitter

nethogs — 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  : quitter

iperf3 — 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_second

nload — monitoring bande passante globale

# Afficher trafic entrant/sortant sur eth0
nload eth0
 
# Navigation : ← → pour changer d'interface
 
# Unité en Mbits/s
nload -u M eth0

Statistiques 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