Sniffer des connexions réseaux avec la commande tcpdump sous Linux
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 commentaireComment 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.
Ooops, la grosse faute d'orthographe.
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.
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 : 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.
Il y a aussi le coût des certificats pour chaque site.
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 : 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)
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 : faut utiliser l'option ftp ou alors le port 21 tout simplement. Exemple :
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
Est ce qu'il est mieux d'utiliser wireshark ou tcpdump sous Windows ?
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.