Capturer et traiter du trafic réseau – deuxième partie
Ce billet fait suite au billet http://www.telecom-reseaux.net/reseaux/capturer-et-traiter-du-trafic-reseau-premiere-partie-196. En conséquence, il est impératif d’avoir pris connaissance de ce dernier avant de lire celui-ci, sinon le contenu et les références évoquées dans cet article sont susceptibles de vous paraitre étranges.
—————————————————-
La galaxie des logiciels du projet Wireshark :
Wireshark, tout le monde connaît. C’est joli, c’est rapide, mais c’est limité.
En s’aidant de la libpcap (sous les Unix) ou winpcap (sous MS Windows), nous pouvons créer un outil de capture basique en moins de 50 lignes de code Perl, environ une centaine en C. Quelques centaines de lignes plus tard nous rajoutons le stockage dans plusieurs fichiers. Wireshark, qui fait des miliers de lignes de code intègre donc tout un tas de code, exécuté à son chargement, mais non utile pour la capture. Ce code sera utile pour les statistiques, dessiner des courbes, gérer les boutons et menus déroulants de l’interface graphique, ect.
C’est là que 2 outils arrivent et vont nous intéresser. Le premier est Tshark. C’est Wireshark en mode console. Il est disponible sous les Unix comme un outil à part de Wireshark. Je ne sais pas s’il est disponible sous MS Windows. Nous pouvons appliquer des filtres à l’affichage, stocker le résultat dans un ou plusieurs fichiers et tout et tout comme Wireshark. Il affiche également en console le résultat courant de la capture. C’est moins joli et coloré, mais si nous avons uniquement accès à la sonde en telnet ou ssh, c’est tout de même bien utile. On peut exporter le résultat dans un fichier texte ou postscript ou …
Le second outil est dumpcap. Il est à part (dumpcap.exe) sous MS Windows, mais inclus dans le paquet Wireshark sous Unix (concernant GNU/Linux Debian du moins). Il est aussi en mode console, permet de faire des filtres à la capture, de capturer seulement x octets de chaque trame (minimum 68 si la trame fait plus de 68 octets), de mettre tout cela dans plusieurs fichiers avec une rotation ou pas, ect. La seule différence avec Tshark, c’est que le résultat est écrit dans le format pcap, donc non lisible par l’homme (sauf Néo et toute sa clique qui ont fait héxadécimal en seconde langue en sortant de la matrice) et que pendant la capture nous ne voyons pas grand chose d’autre que le compteur de trames s’incrémentant laconiquement.
Il existe d’autres outils que je ne détaillerai pas mais qui sont utiles pour manipuler des fichiers de capture sans passer par l’interface et donc sans mettre à genoux le quadriprocesseurs doubles-coeurs que vous idôlatrez. De plus, Wireshark n’étant pas multi-threadé, inutile d’avoir des multi-processeurs ou des processeurs double-coeur … Donc ces outils dont je ne vous parlerai pas sont :
– editcap : Editer les fichiers de capture, inclus dans Wireshark. Mode console. Sa principale fonction est de supprimer les paquets du fichier de capture (équivalent à appliquer un filtre de capture à postériori) ou pour convertir le fichier dans un autre format.
– mergecap : Concaténer plusieurs fichiers en un.
– text2pcap : Convertir un fichier de capture au format ASCII hexadécimal dans le format pcap.
– capinfos : Donner des informations générales sur le fichier de capture (nombre de trames, taille du fichier, la durée de la capture, …).
Je vous laisse aller faire un tour à l’adresse http://www.wireshark.org/docs/wsug_html_chunked/AppTools.html
pour avoir plus d’infos sur ces différents outils, ainsi que les arguments qu’ils apprécient de voir renseignés.
Capture avec dumpcap :
Après cette grande appartée, revenons à notre capture d’une journée. Déjà, pour s’assurer qu’elle ne plante pas vicieusement en pleine nuit suite à un nombre trop important de fenêtres ouvertes, nous allons utiliser dumpcap.
Sous GNU/Linux :
dumpcap -i eth0 -w /tmp/tutu -a duration:86400 -b filesize:50000 -s 68
En bon français, nous enregistrons le trafic passant sur l’interface eth0 dans des fichiers qui commencent par tutu, dans le répertoire /tmp. Ils seront nommés par l’outil comme, par exemple :
tutu_00004_20090114230857
où 00004 signifie que c’est le 4ième fichier généré lors de la capture,
et 20090211230857 la date de génération de ce fichier (11 février 2009 à 23h08 et 57 secondes, argh, je devrais être couché à cette heure moi !).
La durée de capture s’exprime en secondes, donc 24 heures = 86400 secondes.
La taille de chaque fichier de capture en Ko, donc 50000Ko dans notre cas.
Enfin nous capturons seulement les 68 premiers octets. Pour ceux qui sont inquiets de savoir comment calculer le débit si l’on n’archive que les 68 premiers octets qu’ils se rassurent : il est stocké dans le fichier la taille initiale du paquet avant que celui-ci se fasse retailler et biensûr wireshark prend en compte dans son calcule la taille originale. Ouf, vous avez eu peur, hein ?
Ci-dessous le résultat de dumpcap -help :
Capture network packets and dump them into a libpcap file.
See http://www.wireshark.org for more information.
Usage: dumpcap [options] …
Capture interface:
-i name or idx of interface (def: first non-loopback)
-f packet filter in libpcap filter syntax
-s packet snapshot length (def: 65535)
-p don’t capture in promiscuous mode
-y
link layer type (def: first appropriate)
-D print list of interfaces and exit
-L print list of link-layer types of iface and exit
-S print statistics for each interface once every second
-M for -D, -L, and -S produce machine-readable output
Stop conditions:
-c
stop after n packets (def: infinite)
-a … duration:NUM – stop after NUM seconds
filesize:NUM – stop this file after NUM KB
files:NUM – stop after NUM files
Output (files):
-w name of file to save (def: tempfile)
-b … duration:NUM – switch to next file after NUM secs
filesize:NUM – switch to next file after NUM KB
files:NUM – ringbuffer: replace after NUM files
Miscellaneous:
-v print version information and exit
-h display this help and exit
Example: dumpcap -i eth0 -a duration:60 -w output.pcap
« Capture network packets from interface eth0 until 60s passed into output.pcap »
Use Ctrl-C to stop capturing at any time.
A suivre !
Rédigé par Guillaume LEHMANN


