Linux Réseau


TCPdump
Ecouter et capturer des paquets IP sur le réseau



Pour : Linux, Windows, Mac


TCPdump est un outil pour écouter tous ce qui ce passe sur vos interface réseau et permet de capturer les paquets IP.


Commande de base

Il est préférable de lancer TCPdump avec les droits du compte root, pour permêtre à votre interface réseau d'accepter tous les paquets IP, même ceux qui ne lui sont pas destinés.

La commande de base pour écouter tous ce qui ce passe sur votre interface avec les options par défault:

# tcpdump tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 07:52:18.994930 IP octetmalin > google-public-dns-a.google.com: ICMP echo request, id 10714, seq 1, length 64 07:52:18.995320 IP octetmalin.54085 > neufbox.domain: 2274+ PTR? 8.8.8.8.in-addr.arpa. (38) 07:52:18.997254 IP neufbox.domain > octetmalin.54085: 2274 1/0/0 PTR google-public-dns-a.google.com. (82) 07:52:18.997418 IP octetmalin.54475 > neufbox.domain: 37556+ PTR? 1.1.168.192.in-addr.arpa. (42) 07:52:18.998588 IP neufbox.domain > octetmalin.54475: 37556* 1/0/0 PTR neufbox. (63) 07:52:19.041883 IP google-public-dns-a.google.com > octetmalin: ICMP echo reply, id 10714, seq 1, length 64 07:52:19.995006 IP octetmalin > google-public-dns-a.google.com: ICMP echo request, id 10714, seq 2, length 64 07:52:20.041359 IP google-public-dns-a.google.com > octetmalin: ICMP echo reply, id 10714, seq 2, length 64 07:52:20.995942 IP octetmalin > google-public-dns-a.google.com: ICMP echo request, id 10714, seq 3, length 64 07:52:21.042651 IP google-public-dns-a.google.com > octetmalin: ICMP echo reply, id 10714, seq 3, length 64 07:52:21.995985 IP octetmalin > google-public-dns-a.google.com: ICMP echo request, id 10714, seq 4, length 64 07:52:22.042926 IP google-public-dns-a.google.com > octetmalin: ICMP echo reply, id 10714, seq 4, length 64 07:52:22.995828 IP octetmalin > google-public-dns-a.google.com: ICMP echo request, id 10714, seq 5, length 64



Comme vous pouvez le voir, chaque ligne représente une transmission d'un paquet IP.
Les dernières lignes représente un ping que j'ai fait vers un serveur DNS de Google, le 8.8.8.8.
On peut voir que l'envoi est suivie de la réception et ainsi de suite.

Voici le détail d'une transmission:

Heure d'arrivée du paquet sur l'interface réseau
Type de protocole TCP, UDP, IGMP, ARP, ...
Adresse-réseau-source
Port-réseau-source
>
Adresse-réseau-destination
Port-réseau-destination
Requête ping, DNS, HTTP, FTp ...


Pour vous aidez vous disposez de la liste des numéro de port correspondant au nom du port dans le fichier /etc/services.

# nano /etc/services


Ou vous pouvez filtrer une demande:

# grep nom_ou_ip_du_port /etc/services


Par exemple:

# grep ftp /etc/services ftp 21/tcp



L'optin "-D" permet d'afficher les interfaces réseaux disponibles pour la capture:

tcpdump -D 1.eth1 2.any (Pseudo-device that captures on all interfaces) 3.lo


L'option "-i" permet de forcer l'utiliser d'une interface réseau:

# tcpdump -i eth1


L'option "-n" permet de ne pas faire de résolution des nom et ainsi voir les IP.

# tcpdump -n 08:50:38.741674 IP 192.168.1.42 > 8.8.8.8: ICMP echo request, id 10871, seq 8, length 64 08:50:38.789402 IP 8.8.8.8 > 192.168.1.42: ICMP echo reply, id 10871, seq 8, length 64 08:50:39.742845 IP 192.168.1.42 > 8.8.8.8: ICMP echo request, id 10871, seq 9, length 64 08:50:39.789252 IP 8.8.8.8 > 192.168.1.42: ICMP echo reply, id 10871, seq 9, length 64


L'option "-v" permet d'avoir plus d'information (v comme verbose, en Français bavard):

# tcpdump -v


L'option "-X" permet d'afficher les paquets en hexadécimal

# tcpdump -X 13:15:47.083173 IP pc-sport > google-public-dns-a.google.com: ICMP echo request, id 13364, seq 17, length 64 0x0000: 4500 0054 0000 4000 4001 68a4 c0a8 014d E..T..@.@.h....M 0x0010: 0808 0808 0800 aad6 3434 0011 634e f34d ........44..cN.M 0x0020: d644 0100 0809 0a0b 0c0d 0e0f 1011 1213 .D.............. 0x0030: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 .............!"# 0x0040: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&'()*+,-./0123 0x0050: 3435 3637 4567 13:15:47.131557 IP google-public-dns-a.google.com > pc-sport: ICMP echo reply, id 13364, seq 17, length 64 0x0000: 4500 0054 30ea 0000 3301 84ba 0808 0808 E..T0...3....... 0x0010: c0a8 014d 0000 b2d6 3434 0011 634e f34d ...M....44..cN.M 0x0020: d644 0100 0809 0a0b 0c0d 0e0f 1011 1213 .D.............. 0x0030: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 .............!"# 0x0040: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&'()*+,-./0123 0x0050: 3435 3637 4567




Voir le contenu d'un paquet IP

L'option "-A" permet de faire un dump du contenu de chaque paquet (de voir son contenu):

# tcpdump -v -A 07:49:31.403589 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) octetmalin > google-public-dns-a.google.com: ICMP echo request, id 10706, seq 4, length 64 E..T..@.@.h....M........)......Mw(... .................. !"#$%&'()*+,-./01234567 07:49:31.450033 IP (tos 0x0, ttl 53, id 45040, offset 0, flags [none], proto ICMP (1), length 84) google-public-dns-a.google.com > octetmalin: ICMP echo reply, id 10706, seq 4, length 64 E..T....5..........M....)......Mw(... .................. !"#$%&'()*+,-./01234567


Ces paquets correspondent à un ping vers un serveur DNS public de Google.



Filtrage

Permet d'afficher uniquement les paquets ftp du port 21

# tcpdump port ftp

ou

# tcpdump port 21


Permet d'afficher les paquets qui ont pour adresse de destination et/ou sources 192.168.1.144

# tcpdump host 192.168.1.144


Permet d'afficher les paquets qui ont pour adresse de destination 192.168.1.144

# tcpdump dst 192.168.1.144


Permet d'afficher les paquets qui ont pour adresse source 192.168.1.144

# tcpdump src 192.168.1.144




Cumulation des filtres

Voici des exemples:

Permet d'afficher tous les paquets ftp à destination ou de sources de l'IP 192.168.1.55

# tcpdump host 192.168.1.55 and port ftp


Affiche tous les paquets en provenance de 192.168.1.144 vers 192.168.20.32 sur le port 21 en tcp.

# tcpdump src host 192.168.1.144 and dst host 192.168.20.32 and port 21 and tcp


Affiche tous les paquets en provenance de 192.168.1.144 vers 192.168.20.32 sur le port 21 en tcp.

# tcpdump -x -X -s 0 src host 192.168.1.144 and dst host 192.168.20.32 and port 21 and tcp




Capturer un paquet IP

L'option "-w" permet de capturer des paquets dans un fichier qui pourra être analysé plus tard:

# tcpdump -w nom_du_fichier


Exemple:

# tcpdump -w capture.tcpdump


L'option "-r" permet de lire les paquets capturés

# tcpdump -v -r capture.tcpdump


Les données capturées ne sont pas lisible avec un éditeur de texte, il est donc uniquement possible de les lire avec un outil compatible comme TCPdump ou Wireshark qui dispose d'une interface graphique.

Mais si vous voulez que les données capturé puissent être lu par un éditeur de texte:
Par exemple:

# tcpdump >> capture.txt




Par O.Cédric
Sur www.octetmalin.net

Article publié le:
11/06/2011 18:21






Cette page vous à plus?

Dîtes que vous l'aimez en cliquant sur le bouton Facebook.