← retour aux outils back to tools

# 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