Capturer et analyser un trafic réseau avec Wireshark

Date: 4/05/2011 | Catégories: Open-source,Planet-libre,Reseau | Tags: ,,,,

Dans la boîte à outil des administrateurs et architectes réseaux, les outils de captures viennent souvent en bout de chaîne, quand toutes les autres solutions pour résoudre un problème ont été essayées. En effet, la capture et l'analyse d'un trafic réseau peut s'avérer fastidieuse pour une personne non avertie et lourde à mettre en place pour un spécialiste.

Nous allons donc dans ce billet prendre quelques pistes qui vous, je l’espère, vous permettre de vous y retrouver.

C'est quoi une capture réseau ?

Une capture réseau est une photo à un instant t (ou sur une période de temps t0/t1) de ce qui transite sur un réseau informatique. Si l'on choisi bien le point de capture, on pourra sauvegarder l'ensemble d'un trafic intéressant pour ensuite l'analyser à tête reposée.

Une capture réseau pour quoi faire ?

Les principales applications d'une capture puis d'une analyse réseau sont:

  • identifier les flux consommateurs sur une liaison Internet, WAN ou locale
  • caractériser le trafic généré par une nouvelle application (par exemple avant un déploiement)
  • identifier les causes d'un problème de performance sur un réseau (tempête de broadcast, problème physique sur un équipement)

Cette liste est bien sûr loin d'être exhaustive...

Ou effectuer la capture réseau ?

C'est un des points critiques. Il faut effectivement se positionner à un endroit ou l'on va capturer l'ensemble du trafic "intéressant" par rapport à votre besoin sans pour autant sauver des gigaoctets d'informations.

Pour analyser les flux d'une liaison WAN, le plus simple est de faire la capture au plus proche de l'interface réseau de sortie vers cette liaison. Si cette liaison n'est pas une liaison Ethernet, alors il faudra se positionner en amont du routeur gérant cette liaison.

Pour analyser une nouvelle application, le plus simple est de capturer le trafic sur un des PC clients ou sur le serveur dans le cas d'une architecture client/serveur).

Sur un réseau LAN commuté, vous pouvez soit utiliser les fonctions de redondance de port au niveau d'un commutateur central, soit positionner un bon vieux HUB à un endroit stratégique de votre réseau.

Comment faire la capture réseau ?

Pour prendre un exemple simple, nous allons capturer le trafic transitant par un routeur GNU/Linux (ou BSD). Ce dernier dispose de deux interfaces réseaux. La première coté LAN (eth0) , la seconde coté WAN (eth1). On commence dans un premier temps par installer Wireshark sur son routeur:

Exemple d'installation sous Ubuntu 10.04 LTS

sudo aptitude install wireshark

Si le routeur ne dispose pas d'interface graphique, nous utiliserons tshark. Ce logiciel permet de capturer le trafic puis de générer un fichier qui sera exploitable par WireShark sur une autre machine disposant d'une interface graphique.

Exemple d'installation sous Ubuntu 10.04 LTS

sudo aptitude install tshark

Ensuite on lance la capture avec Wireshark sur l'interface WAN (eth1):

On peut ensuite sauvegarder la capture faite par Wireshark en allant dans le menu File > Save. Attention, Wireshark est lancé par défaut avec le compte root, il faut donc faire cette sauvegarde dans un répertoire accessible par votre utilisateur standard (par exemple dans /tmp/capture.pcap).

Ou avec TShark sur l'interface WAN (eth1) en sauvegardant la capture dans le fichier /tmp/capture.pcap:

Commencer la capture:

sudo tshark -i eth1 -w /tmp/capture.pcap

Arrêter la capture:

CTRL+C

Comment analyser la capture réseau ?

Il faut un PC sur lequel Wireshark est installé (soit directement sur votre point de capture soit sur un autre PC sur lequel vous aurez téléchargé la capture). On peut noter que Wireshark est disponible sous GNU/Linux, BSD, Mac OS X et Windows. On commence par charger la capture par le menu File > Open (/tmp/capture.pcap). Une fois le fichier chargé, on peut voir que la fenêtre de Wireshark est, par défaut, divisée en 3 sections:

  • la première affiche une liste des paquets IP capturés
  • la seconde donne le détail du paquet IP sélectionné dans la première section
  • la troisième affiche le contenu (en hexadécimal) du paquet IP sélectionné dans la première section

Selon votre capture, il peut être utile d'appliquer un filtre qui ne va afficher que certains paquets. Il est également possible d'effectuer ce filtrage lors de la capture mais par expérience, j'évite de faire cela car on peut louper pas mal de choses...

Donc pour mettre en place un filtrage (par exemple pour n'afficher que les paquet dont l'adresse source est 192.168.200.21) il faut saisir le filtre dans la section Filter puis cliquer sur le bouton Apply:

Remarque: si le fond de la zone de saisie du filtre n'est pas verte, c'est qu'il y a une erreur de syntaxe.

La liste exhaustive des filtres d'affichage disponible est disponible sur cette page. Pour un filtrage au niveau IP on peut se contenter de cette page là.

Il est bien sûr possible de faire des filtre un peu plus complexe, par exemple:

(ip.src == 192.168.200.21) && (ip.dsfield.dscp == 46) && (ip.dst != 192.168.200.10)

Ce filtre va seulement afficher les paquets IP avec comme adresse IP source 192.168.200.21, tagué avec un champs DSCP à EF (valeur décimale = 46) et qui n'ont pas comme adresse de destination 192.168.200.10.

Un exemple concret de A à Z

Pour illustrer de manière plus concrète l'utilisation de ces filtres, nous allons capturer puis analyser la récupération d'une page Web sur mon blog à partir d'un poste client.

  1. On commence donc par lancer le navigateur sur le poste client.
  2. On lance ensuite Wireshark sur le poste client.
  3. On commence la capture sur l'interface eth0 du poste client.
  4. On surfe sur la page en question à partir d'un navigateur Internet. On attend que la page soit complètement chargée.
  5. On arrête la capture.

On devrait ainsi se retrouver avec une capture bien (trop ?) fournie. En effet, nos machines modernes font pas mal de choses en tache de fond. Certaine de ces actions génèrent des requêtes sur le réseau (vérification de présence de mise à jour système, mise à jour de votre Dropbox, requêtes réseau sur votre LAN...).

Nous allons donc commencer par filtrer le trafic intéressant qui, je le rappelle, est la récupération d'une page Web par votre navigateur. L'idée est de bâtir le filtre petit à petit en écartant les requêtes inutiles et en gardant celle nécessaire au bon chargement de la page.

On commence par filtrer les paquets dont l'adresse source ou destination est votre propre poste client (dans mon cas, l'adresse IP de ce client était 192.168.29.79). Pour obtenir la votre, il suffit d'utiliser la commande ifconfig.

Le premier paquets de notre flux devrait, en toute logique être une résolution DNS du domaine blog.nicolargo.com (mon blog sur lequel je charge la page). On voit bien que cette requête à bien été capturé mais avec elle du trafic inutile avant...

Le paquet en question porte le numéro 27, nous allons donc modifier légèrement le filtre pour n'afficher que les paquets dont le numéro est > à 26.

Comme vous allez le voir si vous faite le test, il reste un nombre très important de requêtes pour le simple chargement de cette page. Pour y voir un peu plus clair, il est également possible d'activer la résolution des noms de machines lors de l'affichage. Pour cela il faut se rendre dans le menu Edit > Preferences...

Pour voir la liste complète des requêtes client / serveur, nous pouvons utiliser la fonction conversation (menu Statistics > Conversations) de Wireshark qui va afficher la liste suivante:

On peut également utiliser les outils d'analyses spécifiques aux paquets HTTP en allant dans le menu Statistics > HTTP > Request...

On voit bien que le chargement d'une seule page implique un nombre très important de requêtes HTTP (TCP) sur le réseau et donc que l'optimisation et la limitation de ces requêtes aura un impact significatif sur le temps de chargement de vos pages.

Et si votre patron veut des graphes ?

Le chef, il aime bien les graphes, c'est plus simple à insérer dans un PowerPoint. Heureusement il existe une fonction permettant par exemple d'afficher des graphes  en appliquant le même genre de filtres que l'on a vu dans le chapitre précédant.

Pour cela il faut se rendre dans le  menu Statistics > IO Graphs.

Par défaut, c'est le filtre d'affichage actuel qui sera afficher avec la couleur noire correspondant au graphe n°1. L'échelle enordonnée est en nombre de paquets / seconde.

Pour passer en bits / seconde, il faut aller dans le menu Y Axis > Unit > Bits/Tick:

Pour ajouter d'autres courbes avec des filtres spécifiques, il suffit de saisir les champs Filter puis de cliquer sur le n° de graphes correspondant:

Il est bien sûr possible d'exporter les graphes dans un format facilement intégrable dans un rapport (BMP, JPG, PNG...) en cliquant sur le bouton "Enregistrer".

Conclusion

Ce billet n'est qu'une simple introduction à l'analyse réseau qui est un sujet qui nécessite de bonnes  connaissances sur les réseaux IP. N'hésitez pas à utiliser les commentaires suivants si vous avez des questions complémentaire sur le sujet !

  • penthium2

    merci pour tout ca, il est vraie qu’il est très agréable pour une initiation.

  • Flyingup

    Bonjour Nico,

    Une question, je viens d’sinstaller la dernière version d’Ubuntu sur mon laptop. J’ai appliquer ton excellent script de post install 😉

    Je dispose donc de wireshark et j’aimerais l’tiliser sur lînterface wifi de mon laptop (wlan0). Mais wireshark ne le propose pas.

    Est-ce normal, ou faut il faire une configuration spécial ?

    Cordialement,
    Flyingup

  • Flyingup

    Bonjour Nico,

    Désolé pour ma précédente demande … je dors encore …

    Problème résolu :

    sudo wireshark , c’est ok.

    Cordialement,
    Flyingup

  • Je vais faire mon pinailleur, mais je ne pense pas qu’il soit exact de parler de « photo à un instant t » -> physiquement parlant à un instant t tu peux avoir au mieux un paquet sur ton interface réseau.

    Je préfère ta deuxième formulation (entre t1 et t2) une capture réseau ressemblerait plus à un film qu’une photo !

  • Patrice

    Bonjour Nico,

    Excellent article qui me sera fort utile car je n’ai jamais eu le temps de travailler sur les filtres. Merci 🙂

  • Merci Nico 😉

    Je suis toujours friand de tips Wireshark !

    Lors de ma formation quand on avaient un problèmes, nos formateurs nous disaient 2 mots : Man ! et Wireshark !(admin réseaux noob inside ^^)

    J’ai 2-3 tips que je partagerais ici 😉

  • raoulitos
  • zorgh

    Merci Nico pour cet article complet et très intéressant. J’ajouterai toutefois un point de sécurité : http://www.memoefix.net/?p=110

  • raoulitos

    Bonjour je sais pas si il y a doublons ou plus(vbox crash récursif), très bon article
    pour @Flyingup et ceux que cela intéresse
    http://wiki.wireshark.org/Security &&
    http://wiki.wireshark.org/CaptureSetu/CapturePrivileges

  • raoulitos

    drôle de gestion des commentaires!!!

  • j’utilise wireshark sous mac os …

    et je suis à la recherche de filtre pour mettre en place une détection automatique de mot

    cela permet de ne pas avoir à surveiller en permanence les logs, et à conserver uniquement ce dont on a besoin …

    merci par avance, sous cron c’est encore mieux …

    sebastien

  • tchoutchou

    Il serait intéressant de laisser un lien vers ce billet:http://packetlife.net/blog/2010/mar/19/sniffing-wireshark-non-root-user/
    ou en francais :
    http://www.linux-france.org/~platu/weblog/archives/2010/03/index.html#e2010-03-21T19_24_14.txt

    On y explique la démarche à suivre pour éviter de démarer wireshark en root.

  • raoulitos

    bah j’ai bien essayer (hier quant l’article est parue) mais chaque commentaire poster étaient refusés
    voilà pourquoi « drôle de gestion des commentaire »
    °_O

  • Merci pour ce tutoriel, c’est assez clair et le pas à pas est bien fait. Je ne connaissais pas encore Wireshark mais j’avais déjà tester d’autres sniffers et analyseur réseau. Je trouve qu’il est très complet et vraiment pas cher 😉

  • tobouda

    Bonsoir!
    j’aimerai savoir a quoi sert les données(adresses IP et Mac) des hotes que le wiresharck crack et si cela montre les clé(WEP;WPA) du reseau?

  • MingLiFoo

    Bonjour, quelqu’un peut il me dire si un tel utilitaire va jusqu’à decoder dans les trames des renseignements au niveau « carractère » tels que des logins ou Passwords
    En vous remerciant

  • jasmin_knight

    Bonsoir…

    Est ce que vous pouvez m’aider dans mes essais :
    Voila la situation, je voudrai bien établir des test pour une visioconférence entre 2 puis 3 personnes, connecté sur des sites différents ( réseau ip). Le but de mes test est de détecter les performances de :
    Le délai, la gigue, le taux d’erreurs et le taux de pertes, concernant le flux multimédias générer par une application de visioconférence.
    Les valeurs seront enregistré puis traité plus tard.
    c’est quoi le problème?…et bin je voudrai bien que tu m’explique comment est possible de réaliser tous ca avec wireshark ? comment est possible d’isoler justement le flux de la conversation depuis la signalisation jusqu’à la fermeture de la session et puis d’extraire les contraintes que j’ai indiqué ? le but final de mon test est de qualifié ma connexion et évalué les performances d’un service en comparant enfin les résultats à des valeurs standards pour un minimum de qualité?….

    merci de lire mon message et je serai ravi d’avoir tes recommandations..

    • Les systèmes de vidéoconférence utile le protocole RTP comme couche de transport. C’est ce protocole qui va te fournir les informations de délais, gigues, paquets perdus…

      Pour demander à Wireshark de décoder les paquets RTP il faut sélectionner un paquet RTP puis aller dans le sous menu « Decode As… » puis choisir le port de destination et enfin sélectionner RTP. Tu auras ensuite accès aux informations dans le menu VoIP (ou quelque chose comme ca).

      Si tu n’y arrives pas, je peux faire un billet sur le sujet, tu n’es pas le premier à m’en parler.

      • jasmin_knight

        Je vous remercie pour avoir répondre à mon message…pour ce qui concerne le billet, j’aime bien avoir une description plus détaillé de l’utilisation de wireshark dans ce sujet et je me demande si c’est possible de le publier dans ces jours là, j’en vraiment besoin…et encore une foie merci.

      • jasmin_knight

        autre chose, est ce que il existe des plugins pour wireshark améliorant ces fonctionnalités?..par exemlpe je cherche à avoir une traduction en français de ces fonctionnalités, wé tous cet anglai me fait mal à la tète :), aussi est ce qu’il y a des plugins pour améliorer la représentation graphique des stat?… si sa existe est ce que tu peut me guider vers quelques url 😉

        merci et vive l’open source.

  • dieng

    j’ai du mal a demarrer wireshart car je les install trés bien

  • Pingback: Wireshark non root user()

  • leBloNd

    bonjour a ts, svp esk vous pouvez me dire cmn utiliser wireshark avec NS3 pour analyser des fichiers pcap?? merci d’avance

  • network133

    Bonjour,
    Petite question:Comment afficher sur le graph (statistic puis IO Graph)le débit entrant et sortant !!!Je sais je suis novice mais très interessé par cet info..

  • Bonsoir
    Merci pour le tuto Nico
    je suis à mes debut donc si tu peux me suggérer d’autre tuto sa me ferra plaisir
    Bien a toi

  • linux1908

    onsoirje travaille sur centos.
    je veux faire un programme en c qui sert à envoyer un paquet RTP en changeant son entete telque par exple payload. (ce programme comme wireshark).
    svp pouvez vous m’aider.
    merci

  • Pingback: Réseaux pour le e-learning | Pearltrees()

  • Nicolas13

    Bonjour,
    je galère sur wireshark,

    qqun sait comment logguer tout le traffic IP sans enregistrer le contenu des packets ?

    Merci

    Nicolas

  • Ana Elana

    Qu’est ce que ça veut dire un fichier pcap

  • Pingback: OUTILS | Pearltrees()

  • Pingback: Réseaux - D227 | Pearltrees()

  • Pingback: Metisse_x | Pearltrees()

  • Pingback: Tutoriel | Pearltrees()