---
title: Howto Tcpdump
categories: sysadmin network
...

[Tcpdump](https://www.tcpdump.org/) est un outil permettant d'analyser en détail le trafic visible sur une interface réseau.

Il est disponible sur les distributions GNU/Linux et systèmes d'exploitation FreeBSD, NetBSD, OpenBSD, Mac OS X et dépend de la bibliothèque libpcap.

<http://www.tcpdump.org/tcpdump_man.html>

## Installation

Sous Debian :

~~~
# apt install tcpdump
# tcpdump --version
tcpdump version 4.9.2
libpcap version 1.8.1
OpenSSL 1.0.2l  25 May 2017
~~~

Sous OpenBSD, tcpdump fait partie du système de base. Cette version
est plus ou moins forkée notamment pour apporter des améliorations
pour la sécurité (rajout de la séparation de privilège entre le parser
et la partie qui écoute le réseau).

## Utilisation de base

* Écouter tout le trafic d'une interface :

~~~
# tcpdump -i <int>
~~~

* Écouter ping sur l'interface :

~~~
# tcpdump -i <int> icmp and icmp[icmptype]=icmp-echo
~~~

* Écouter le trafic d'une interface pour un port particulier :

~~~
# tcpdump -i <int> port XXXX
~~~

* Écouter le trafic d'une interface pour un intervalle de ports particuliers :

~~~
# tcpdump -i <int> portrange XXXX-XXXX
~~~

* Écouter le trafic d'une interface pour un hôte particulier :

~~~
# tcpdump -i <int> host 192.0.2.1
~~~

* Écouter le trafic d'une interface pour un réseau particulier :

~~~
# tcpdump -i <int> net 192.0.2.0/24
~~~

* Écouter le trafic d'une interface pour un hôte et un port particulier  :

~~~
# tcpdump -i <int> host 192.0.2.1 and port XXXX
~~~

* Écouter le trafic UDP d'une interface pour un port particulier :

~~~
# tcpdump -i <int> udp port XXXX
~~~

* Afficher le protocole CARP avec des détails

~~~
# tcpdump -ni em1 -vvv proto carp
~~~

* Écouter le trafic sauf ssh (utile sur un serveur où l'on s'y connecte
en ssh)

~~~
# tcpdump -ni <int> not port 22
~~~

* Pouvoir grep la sortie de tcpdump

~~~
# tcpdump -envps 1500 -i enc0 -l | grep 192.0.2.123
~~~

## Utilisation avancée

* Écouter le trafic HTTP sur une interface et afficher les headers :

~~~
# tcpdump -A tcp port 80 or port 443 | egrep --line-buffered '^........(GET |HTTP\/|POST |HEAD )|^[A-Za-z0-9-]+: ' | sed -r 's/^........(GET |HTTP\/|POST |HEAD )/\n\n\1/g'
~~~

* Analyser les logs PF (l'attribut « log » doit être présent sur les
règles)

a posteriori

~~~
# tcpdump -n -ttt -e -r /var/log/pflog
~~~

en temps réel

~~~
# tcpdump -n -ttt -e -i pflog
~~~
