Analyse réseau

Niveau : Star Star Empty Empty Empty
Résumé : wire­shark ; tcp­dump

Face à un pro­blème de com­mu­ni­ca­tion, on en est sou­vent réduit aux outils de base : un snif­fer.

tcp­dump

Le snif­fer le plus connu est tcp­dump. Si vous ne l’avez pas encore uti­lisé, man est votre ami. Mais il est très sim­ple. Petit exem­ple en root :

$ tcpdump host 1.2.3.4 and port 80

Le lan­gage de fil­trage de tcp­dump est assez sim­ple, pour l’appren­dre, cher­cher la sec­tion “expres­sion” dans le manuel de tcp­dump. Mais fina­le­ment, la sor­tie de cet outil n’est pas très pas­sion­nante, et à moins de savoir déco­der le tcp/ip à la vitesse de la lumière ou d’avoir besoin juste d’une petite infor­ma­tion (les paquets pas­sent ? com­bien ? …), il est un peu ardu à uti­li­ser.

Tout de même, les quel­ques options à con­naî­tre :

  • -e : pour des pro­blè­mes au niveau ether­net
  • -i : pour écou­ter sur une inter­face (atten­tion le any par défaut n’inclue pas le loop­back)
  • -s 0 : pour sto­cker l’inté­gra­lité des paquets cap­tu­rés (à uti­li­ser de pré­fé­rence avec -w)
  • -w fichier : sto­cke les don­nées dans un fichier pour ana­lyse ulté­rieure

wire­shark

De son ancien nom ethe­real, wire­shask est l’équi­va­lent gra­phi­que de tcp­dump. On ne se rend pas compte sans l’avoir testé de tout ce qu’apporte la ver­sion gra­phi­que. L’ana­lyse de paquet est plus détaillée qu’avec tcp­dump, on peut deman­der des infos a pos­te­riori à coup de clic ou fil­trer une uni­que com­mu­ni­ca­tion.

Uti­li­sez par exem­ple sudo (ou xauth) pour lan­cer faci­le­ment wire­shark en tant que root. Wire­shark uti­lise les mêmes fil­tres que tcp­dump. Pra­ti­que, votre appren­tis­sage n’est pas perdu.

Voici ce que donne une cap­ture. wshark.png

Remar­quez que vous pou­vez aisé­ment ana­ly­ser le con­tenu des paquets en bas, cou­che par cou­che.

Et par­lons de l’une des fonc­tion­na­li­tés les plus impor­tan­tes de wire­shark : “fol­low TCP stream” dans le menu “ana­lyse”. Cette fonc­tion vous per­met de lire tout le dia­lo­gue TCP comme si vous y étiez. Qui vous donne l’écran sui­vant. Au pas­sage, ne soyez pas sur­pris d’avoir “perdu” des paquets, cette fonc­tion­na­lité en pro­fite pour ajou­ter un fil­tre sur la con­nexion con­si­dé­rée. wshark_stream.png

tcp­dump + wire­shark

Et main­te­nant si la machine que vous vou­lez ana­ly­ser est un ser­veur ? Ce qui est sou­vent le cas. Hé bien on com­bine les deux.

# sur le serveur
$ tcpdump -i eth0 -s0 -w /tmp/dump0.cap
# sur un client quelconque avec wireshark
$ scp serveur:/tmp/dump0.cap .
# puis cliquer sur open dans wireshark pour lire la capture ainsi obtenue

Et la lec­ture se passe de la même façon que si la cap­ture s’était faite sur la machine locale.

Edit : on me fait remar­quer une meilleure méthode pour faire tout cela en une ligne (note, tou­jours faire tenir les com­man­des sur une seule ligne, ça faci­lite les essais suc­ces­sifs).

# Le user et le sudo sont à moduler selon votre situation
# Attention au cas du port 22 qu'on utilise en direct
$ ssh server "sudo tcpdump -i eth0 -s0 -w - port not 22" | wireshark -i - -k

Pour ceux qui vou­draient savoir com­ment ça mar­che avec un mot de passe : ça mar­che bien, puis­que ssh comme sudo uti­li­sent le tty pour deman­der le mot de passe et non pas stdin (vous savez le truc qui fait qu’on ne peut pas met­tre le mot de passe dans un script et lui pas­ser en pipe).

Vus : 187
Publié par Peck : 100