adsl
Tcpdump est un logiciel en ligne de commande sous Linux, qui permet de capturer et d'analyser tous les paquets qui transitent par une carte réseau. Cet article explique son fonctionnement et est illustré de quelques exemples.

1. Installation

Lancez cette commande en root pour une distribution à base de rpm (Fedora, CentOS, RedHat ...) :

yum install tcpdump

Ou celle-ci pour une distribution à base de debian (Ubuntu, Debian ...) :

apt-get install tcpdump

2. Exemples d'utilisation simple

Dans les exemples donnés ici, la carte réseau utilisée est identifiée par eth0. Il faut savoir également que cette commande n'est accessible que pour l'utilisateur root.

Capturer toutes les connexions, qui ont pour source une adresse IP commençant par 192.168. :

tcpdump -i eth0 src net 192.168

Capturer toutes les connexions, qui ont pour destination une adresse IP bien précise :

tcpdump -i eth0 dst net 192.168.0.175

Isoler toutes les connexions qui utilisent le port 80 (http) :

tcpdump -i eth0 port 80

On pourra également isoler la source ou la destination. Ici on ne souhaite capturer que les envois de mails (port 25 en destination) :

tcpdump -i eth0 dst port 25

3. Exemples d'utilisation avancée

La commande tcpdump permet également d'utiliser des expressions logiques, afin d'affiner les captures. Pour cela, on peut utiliser les opérateurs logiques suivants :

  • Négation : ! ou not
  • Opérateur et : && ou and
  • Opérateur ou : || ou or

Si je souhaite capturer toutes les connexions réseaux qui vont de l'adresse IP 192.168.0.175 vers l'adresse 192.168.0.1, utilisant le protocole TCP et le port 80, je pourrais utiliser une expression comme celle-ci :

tcpdump -i eth0 src 192.168.0.175 and dst 192.168.0.1 and port 80 and tcp

Vous l'avez peut-être remarqué, mais toutes ces commandes n'affichent que le dialogue effectué par la carte réseau. Pour afficher le contenu même des paquets qui transitent au format hexadécimal et ascii, on pourra utiliser les options -XX (ascii + hexa) et -s0 (= pour full content).

Voici un exemple de capture, lorsque q'un navigateur web se connecte à l'adresse www.tux-planet.fr :

0x0040: d775 4745 5420 2f73 7479 6c65 2e63 7373 .uGET./style.css
0x0050: 2048 5454 502f 312e 310d 0a48 6f73 743a .HTTP/1.1..Host:
0x0060: 2077 7777 2e74 7578 2d70 6c61 6e65 742e .www.tux-planet.
0x0070: 6672 0d0a 5573 6572 2d41 6765 6e74 3a20 fr..User-Agent:.

La commande tcpdump permet également une utilisation mal intentionnée, comme le montrent ces exemples :

Capturer un mot de passe FTP :

tcpdump -XX -s0 -i eth0 tcp and port 21 | grep -A1 PASS

Récupérer un cookie de session, d'un utilisateur authentifié sur un site web :

tcpdump -XX -s0 -i eth0 port 80 | grep -i -A5 Cookie

Capturer des emails envoyés sur le réseau (ici on prend une longueur de 20 lignes, à adapter selon la taille du message) :

tcpdump -XX -s0 -i eth0 port 25 | grep -i -A20 From

Capturer des conversations msn (longueur de 10 lignes à adapter aussi selon la taille du message) :

tcpdump -XX -s0 -i eth0 port 1863 | grep -A10 "text/plain"

On comprend ici très rapidement l'utilité d'utiliser des connexions sécurisées (https, ftps, ssh, smtps ...) lorsque l'on est sur Internet, afin de rendre les informations sensibles, illisibles via ce procédé.


13 Commentaires pour "Sniffer des connexions réseaux avec la commande tcpdump sous Linux"

Flux des commentaires de cet article Ajouter un commentaire
  •  

    Comment expliqués que les connexions sécurisées soient si peu répandues pour le grand public?

    Aucun FAI ne propose de POPS ou SMTPS...
    les FTP sont légion
    Meme se loguer sur Netvibes, pourtant site tout récent ne peut se faire en HTTPS.

    Eon , le 5 octobre 2007 à 19:27
  •  

    Ooops, la grosse faute d'orthographe.

    Eon , le 5 octobre 2007 à 19:28
  •  

    Bonne question, peut-être parce qu'un certificat ça coûte super cher et que la sécurité informatique n'est pas encore devenu une priorité pour certain.

    De plus cela passe bien au près des utilisateurs, étant donnée que 90% d'entre eux ne se doute même pas que des techniques existes pour les espionner ou leurs voler leurs mots de passes.

    pti-seb , le 5 octobre 2007 à 20:01
  •  

    Il faut savoir que la mise en place de transmissions cryptées demande de la puissance de calcul. Toi, comme simple client, tu peux te permettre de créer des liaisons cryptées avec ssh car, généralement, ta machine te le permet. En ce qui concerne les FAI, ce sont des milliers de connexions par minutes qu'ils reçoivent. Si chaque connexion était sécurisée, c'est une immense puissance de calcul qu'il leur faudrait et ils ne sont pas prêt pour un tel investissement.
    Seules les transmissions de numéro de carte ou d'identifiants (sur certains sites), considérées comme sensibles, sont cryptées.

    Gseb29 , le 6 octobre 2007 à 15:40
  •  

    @Gseb29 : effectivement, vu comme ça cela peut se comprendre un peu. Néanmoins, c'est grosse société, si elle le voulaient, pourraient investir sans problème dans des super-calculateurs.

    pti-seb , le 6 octobre 2007 à 15:55
  •  

    Il y a aussi le coût des certificats pour chaque site.

    Eon , le 6 octobre 2007 à 16:45
  •  

    Pour info vous pouvez utiliser Wireshark qui est plus pratiquement pour la mise en place de filtre sur le flaux de traffic capturé.

    John Doe , le 11 octobre 2007 à 23:18
  •  

    @John Doe : tcpdump permet d'appliquer des filtres exactement comme wireshark le fait:
    ainsi, tcpdum icmp ne transmettra que le traffic icmp, mais aussi des filtres très précis :
    tcpdump 'tcp[13] & 0xff = 2'
    (pour les paquets tcp ayant le flag SYN, par application d'un masque sur l'octet 13 (0 inclus) des entêtes).
    ou tcpdump 'tcp[13] = 3' pour détecter un scan SYN/FIN

    On pourrait s'amuser à écrire des filtres pendant des heures!

    Sinon, pour ceux qui sont interessés par l'utilisation de tels logiciels, j'ai écrit il y a peu un article sur leur détection à distance (pourtant théoriquement impossible, cf. le lien vers mon blog)

    Hatch-the-Hitch , le 30 octobre 2007 à 21:08
  •  

    Salut ! Voulez vous m'aider à trouver une option qu'on utilise avec la commande tcpdump afin de faire un filtrage, c'est à dire je veux sniffer un type particulier de traffic par exemple les paquets Ftp .
    MERCI d'avance.

    foufou , le 2 octobre 2008 à 11:20
  •  

    @foufou : faut utiliser l'option ftp ou alors le port 21 tout simplement. Exemple :

    # tcpdump -i eth0 and port 21
    # tcpdump -i eth0 and tcp

    pti-seb , le 2 octobre 2008 à 20:14
  •  

    Salut,
    Content de tes tutos, mais quand je lance ses commande pour sniffer un port il me faut attendre longtemps, je fini par annuler la commande. pourquoi ce aspect. et si il ya une reponse commander puis je le consulater? merci

    bess , le 12 février 2009 à 20:35
  •  

    Est ce qu'il est mieux d'utiliser wireshark ou tcpdump sous Windows ?

    manou , le 15 novembre 2009 à 23:57
  •  

    Sinon il y a NI_Dump un outil qui permet de dumper de manière spécifique avec beaucoup plus de finesse. Le soft analyse les protocoles et permet de filtrer par exemple le trafic email pour les email d'une certaine personne.

    ramon , le 16 décembre 2009 à 14:19

actualité android apache apple astuce astuces bash bilboblog blog boot chrome clavier commande commandes conky date debian Desktop développement elementary exploit faille fedora firefox flash gimp gnome google graphique Graphisme hack hacking Hardware humour intel internet iphone jailbreak Jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette metasploit microsoft mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet publicité redhat red hat rpm réseau screenshot script serveur serveurs shell sql ssh statistiques sysadmin system Sécurité thème tux-planet tv twitter ubuntu unity vidéo vidéos vlc voyage wallpaper windows wordpress yum