tcpdump

Analyseur de paquets en ligne de commande. Capture et filtre le trafic réseau avec des expressions BPF. Indispensable pour le debug et l'investigation réseau sur des systèmes headless. Command-line packet analyzer. Captures and filters network traffic with BPF expressions. Essential for debugging and network forensics on headless systems.

↗ https://www.tcpdump.org

Overview

tcpdump is the standard command-line network packet analyzer. It captures packets matching Berkeley Packet Filter (BPF) expressions and dumps them to the terminal or a .pcap file for later analysis in Wireshark.

Basic Capture

Capture on all interfaces

sudo tcpdump -i any

Specific interface

sudo tcpdump -i eth0

Capture N packets then stop

sudo tcpdump -i eth0 -c 100

Don’t resolve hostnames/ports (faster, clearer IPs)

sudo tcpdump -i eth0 -nn
# Verbose output
sudo tcpdump -i eth0 -v
sudo tcpdump -i eth0 -vvv    # Maximum verbosity

# Show hex + ASCII
sudo tcpdump -i eth0 -X
sudo tcpdump -i eth0 -XX     # Include Ethernet headers
sudo tcpdump -i eth0 -tt     # Unix timestamps
sudo tcpdump -i eth0 -ttt    # Time between packets

Write & Read pcap Files

Write to file

sudo tcpdump -i eth0 -w capture.pcap

Write with rotation (100MB files)

sudo tcpdump -i eth0 -w capture-%H%M%S.pcap -C 100

Read from file

tcpdump -r capture.pcap

Read and filter

tcpdump -r capture.pcap 'host 10.10.10.1'

BPF Filters

Filter by host

sudo tcpdump -i eth0 host 10.10.10.1
# Source or destination
sudo tcpdump -i eth0 src 10.10.10.1
sudo tcpdump -i eth0 dst 10.10.10.1

# Filter by port
sudo tcpdump -i eth0 port 80
sudo tcpdump -i eth0 port 80 or port 443

# Protocol
sudo tcpdump -i eth0 tcp
sudo tcpdump -i eth0 udp
sudo tcpdump -i eth0 icmp

Network/subnet

sudo tcpdump -i eth0 net 10.10.10.0/24
# Complex filters
sudo tcpdump -i eth0 'tcp port 80 and host 10.10.10.1'
sudo tcpdump -i eth0 'not arp and not icmp'
sudo tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'   # SYN packets

Capture DNS queries

sudo tcpdump -i eth0 -nn 'udp port 53'

Capture HTTP traffic

sudo tcpdump -i eth0 -A 'tcp port 80'

Capture credentials (cleartext protocols)

sudo tcpdump -i eth0 -nn -A 'port ftp or port telnet or port pop3'

Useful One-Liners

Watch HTTP GET requests

sudo tcpdump -i eth0 -nn -A 'tcp port 80' | grep -E 'GET|POST|Host:'

Capture ICMP (ping)

sudo tcpdump -i eth0 icmp

Monitor ARP (host discovery)

sudo tcpdump -i eth0 arp

Capture traffic to/from specific port range

sudo tcpdump -i eth0 'portrange 8000-8080'

Show all unique IPs communicating

sudo tcpdump -i eth0 -nn -q | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -rn

Tips

  • Always use -nn to disable name resolution — faster and shows actual IPs/ports
  • -A prints packet payload as ASCII — useful for cleartext protocol analysis
  • Save to pcap (-w) when dealing with high-volume traffic, analyze offline with Wireshark
  • BPF filters are applied at capture time (efficient) vs post-capture filtering in Wireshark
Help / Man page
tcpdump [options] [expression]

Interface:
  -i interface     Interface (any = all)
  -D               List available interfaces

Capture:
  -c count         Exit after N packets
  -s snaplen       Bytes to capture per packet (0 = full)
  -w file          Write pcap file
  -r file          Read pcap file
  -C size_MB       Rotate output file at size (with -w)

Output:
  -n               Don't resolve hostnames
  -nn              Don't resolve hostnames or ports
  -v/-vv/-vvv      Verbosity levels
  -q               Quiet (less protocol info)
  -A               Print payload as ASCII
  -X               Print payload as hex+ASCII
  -e               Print Ethernet header
  -t/-tt/-ttt      Timestamp format

BPF Primitives:
  host X           src or dst host
  src/dst X        source or destination
  net X/prefix     network
  port X           port number
  portrange X-Y    port range
  proto tcp/udp/icmp/arp
  not/and/or       boolean operators

Vue d’ensemble

tcpdump est l’analyseur de paquets réseau standard en ligne de commande. Il capture les paquets correspondant à des expressions BPF (Berkeley Packet Filter) et les affiche dans le terminal ou les écrit dans un fichier .pcap pour une analyse ultérieure dans Wireshark.

Capture de base

# Capturer sur toutes les interfaces
sudo tcpdump -i any

# Interface spécifique
sudo tcpdump -i eth0

# Capturer N paquets puis s'arrêter
sudo tcpdump -i eth0 -c 100

# Ne pas résoudre les noms d'hôtes/ports (plus rapide, IPs plus lisibles)
sudo tcpdump -i eth0 -nn

# Sortie verbeuse
sudo tcpdump -i eth0 -v
sudo tcpdump -i eth0 -vvv    # Verbosité maximale

# Afficher en hex + ASCII
sudo tcpdump -i eth0 -X
sudo tcpdump -i eth0 -XX     # Inclure les en-têtes Ethernet

# Timestamps Unix
sudo tcpdump -i eth0 -tt

# Temps entre les paquets
sudo tcpdump -i eth0 -ttt

Écriture et lecture de fichiers pcap

# Écrire dans un fichier
sudo tcpdump -i eth0 -w capture.pcap

# Écrire avec rotation (fichiers de 100 Mo)
sudo tcpdump -i eth0 -w capture-%H%M%S.pcap -C 100

# Lire depuis un fichier
tcpdump -r capture.pcap

# Lire et filtrer
tcpdump -r capture.pcap 'host 10.10.10.1'

Filtres BPF

# Filtrer par hôte
sudo tcpdump -i eth0 host 10.10.10.1

# Source ou destination
sudo tcpdump -i eth0 src 10.10.10.1
sudo tcpdump -i eth0 dst 10.10.10.1

# Filtrer par port
sudo tcpdump -i eth0 port 80
sudo tcpdump -i eth0 port 80 or port 443

# Protocole
sudo tcpdump -i eth0 tcp
sudo tcpdump -i eth0 udp
sudo tcpdump -i eth0 icmp

# Réseau/sous-réseau
sudo tcpdump -i eth0 net 10.10.10.0/24

# Filtres complexes
sudo tcpdump -i eth0 'tcp port 80 and host 10.10.10.1'
sudo tcpdump -i eth0 'not arp and not icmp'
sudo tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'   # Paquets SYN

# Capturer les requêtes DNS
sudo tcpdump -i eth0 -nn 'udp port 53'

# Capturer le trafic HTTP
sudo tcpdump -i eth0 -A 'tcp port 80'

# Capturer des credentials (protocoles en clair)
sudo tcpdump -i eth0 -nn -A 'port ftp or port telnet or port pop3'

One-liners utiles

# Observer les requêtes HTTP GET
sudo tcpdump -i eth0 -nn -A 'tcp port 80' | grep -E 'GET|POST|Host:'

# Capturer ICMP (ping)
sudo tcpdump -i eth0 icmp

# Surveiller ARP (découverte d'hôtes)
sudo tcpdump -i eth0 arp

# Capturer le trafic vers/depuis une plage de ports spécifique
sudo tcpdump -i eth0 'portrange 8000-8080'

# Afficher toutes les IPs uniques qui communiquent
sudo tcpdump -i eth0 -nn -q | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -rn

Conseils

  • Toujours utiliser -nn pour désactiver la résolution de noms : plus rapide et affiche les vraies IPs/ports
  • -A affiche le payload du paquet en ASCII : utile pour l’analyse de protocoles en clair
  • Sauvegarder en pcap (-w) pour du trafic à haut volume, puis analyser hors ligne avec Wireshark
  • Les filtres BPF sont appliqués au moment de la capture (efficace) contrairement au filtrage post-capture dans Wireshark
Aide / Page de manuel
tcpdump [options] [expression]

Interface:
  -i interface     Interface (any = all)
  -D               List available interfaces

Capture:
  -c count         Exit after N packets
  -s snaplen       Bytes to capture per packet (0 = full)
  -w file          Write pcap file
  -r file          Read pcap file
  -C size_MB       Rotate output file at size (with -w)

Output:
  -n               Don't resolve hostnames
  -nn              Don't resolve hostnames or ports
  -v/-vv/-vvv      Verbosity levels
  -q               Quiet (less protocol info)
  -A               Print payload as ASCII
  -X               Print payload as hex+ASCII
  -e               Print Ethernet header
  -t/-tt/-ttt      Timestamp format

BPF Primitives:
  host X           src or dst host
  src/dst X        source or destination
  net X/prefix     network
  port X           port number
  portrange X-Y    port range
  proto tcp/udp/icmp/arp
  not/and/or       boolean operators