jeudi 4 novembre 2010

Mode d'emploi tcpdump & tshark

  • TCPDUMP

Pour installer TcpDump sous Debian / Ubuntu :
sudo apt-get install tcpdump

Attention, pour utiliser TcpDump, il faut être root. Sous Ubuntu, il suffit de mettre sudo devant le nom de la commande. (sudo tcpdump ....)


Voici les lignes de commande que j'utilise pour TcpDump :

Pour capturer la totalité des paquets (-s 0 = illimité) :
# tcpdump -i eth0 -n -s 0 -w fichier.cap

Pour ne capturer que les 100 premiers octets de chaque paquets :
# tcpdump -i eth0 -n -s 100 -w fichier.cap

Pour capturer la totalité des paquets qui viennent de l'IP 192.168.1.1 et du port 5001 :
# tcpdump -i eth0 -n -s 0 -w fichier.cap host 192.168.1.1 and port 5001

Pour ne capturer que les 100 premiers octets de chaque paquets qui viennent de l'IP 192.168.1.1 et du port 5001 :
# tcpdump -i eth0 -n -s 100 -w fichier.cap host 192.168.1.1 and port 5001

Pour ne capturer que les paquets IGMP (en totalité) :
# tcpdump -i eth0 -n -s 0 -w fichier.cap igmp

Pour ne capturer qu'un certain nombre de paquets, rajouter l'option -c suivi du nombre de paquets
-c 10000 : 10 000 paquets vidéos UDP (MPEG2-TS) = 13,2 Mo
-c 100000 : 100 000 paquets vidéos UDP (MPEG2-TS) = 132,1 Mo

  • eth0 représente l'interface Ethernet sur laquelle je capture le trafic
  • fichier.cap le chemin/nom du fichier crée
  • -n = Ne pas convertir les adresses (comme l'IP, le port, ect...) vers des noms.

  • Tshark

Pour installer Tshark sous Windows :
Installer tout simplement wireshark

Pour installer Tshark sous Debian / Ubuntu :
sudo apt-get install tshark

Pour capturer la totalité des paquets et faire des fichier horodatés de 100 Mo sans limite :

Sous windows : "c:\Program Files\Wireshark\tshark.exe" -i 2 -b filesize:100000 -n -w c:\captures\fichier.cap
Sous linux : # tshark -b filesize:100000 -i eth0 -n -w fichier.cap

Créer un buffer circulaire de 10 fichiers de 100000 Mo :

Sous windows : "c:\Program Files\Wireshark\tshark.exe" -i 2 -b filesize:100000 -b files:10 -n -w c:\captures\fichier.cap
Sous linux : # tshark -b filesize:100000 -b files:10 -i eth0 -n -w fichier.cap

La capture change de fichier tous les 100 Mo et seuls les 10 derniers fichiers sont conservés.
Attention, si tshark est arrêté et redémarré, on a 10 nouveaux fichiers (les 10 de la précédente commande sont gardés indéfiniment)

Faire une capture de 100 Mo puis arrêter en affichant les statistiques RTP (perte de paquets) :

Sous windows : "c:\Program Files\Wireshark\tshark.exe" -i 2 -n -w test.cap -a filesize:100000 -z rtp,streams
Sous linux : # tshark -i eth0 -n -w test.cap -a filesize:100000 -z rtp,streams

# tshark -i eth0 -n -w test.cap -a filesize:100000 -z rtp,streams
Running as user "root" and group "root". This could be dangerous.
Capturing on eth4
73938 packets captured
========================= RTP Streams ========================
    Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
  84.96.146.150  5000   233.136.0.116 65000 0x1324FE6A MPEG-II transport streams 73879     0 (0.0%)            7.39            0.58            0.17
==============================================================


Faire une capture de 10 min puis arrêter en affichant les statistiques RTP (perte de paquets) :

Sous windows : "c:\Program Files\Wireshark\tshark.exe" -i 2 -n -w test.cap -a duration:600 -z rtp,streams
Sous linux : # tshark -i eth0 -n -w test.cap -a duration:600 -z rtp,streams


Vérifier les pertes de paquets du flux TV pendant 10minutes (statistiques RTP) :

Sous windows : "c:\Program Files\Wireshark\tshark.exe" -i 2 -a duration:600 -q -z rtp,streams
Sous linux : # tshark -i eth0 -a duration:600 -q -z rtp,streams

Code: 
# tshark -i eth0 -a duration:600 -q -z rtp,streams
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
141961 packets captured
========================= RTP Streams ========================
    Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
  84.96.146.150  5000   233.136.0.116 65000 0x1324FE6A MPEG-II transport streams 141656   639 (0.4%)          922.74            2.27            0.26 X
==============================================================

Ne pas afficher les paquets capturés (pour batch) : rajouter l'option -q

TAILLE DES PAQUETS CAPTURES :
modifier l'argument -s pour la taille de la capture : exemple -s 68 pour limiter a 68 octets (valeur min) ou -s 0 pour tout capturer

FILTRE DE CAPTURE
- Pour capturer la totalité des paquets qui viennent de l'IP 192.168.1.1 et du port 5001 :
=> tcpdump -i eth0 -n -s 0 -w fichier.cap host 192.168.1.1 and port 5001
- Pour ne capturer que les 100 premiers octets de chaque paquets qui viennent de l'IP 192.168.1.1 et du port 5001 :
 => tcpdump -i eth0 -n -s 100 -w fichier.cap host 192.168.1.1 and port 5001
- Pour ne capturer que les paquets IGMP (en totalité) :
 => tcpdump -i eth0 -n -s 0 -w fichier.cap igmp

DUREE DE LA CAPTURE :

L'argument -c fixe la durée de la capture a xxx paquets quel ques soit la taille des paquets.
Pour information, 30000 paquets représente 50 mo  avec des paquets de 1500 octets
Si on prend des petits paquets (VoIP par exemple) ou si on limite la taille de la capture, il est possible d'augmenter cette valeur par exemple à 300 000 pour une taille identique.

Code:
# Ecriture du cache sur le disque pour que dump ne se produise pas pendant l'écriture
/bin/sync
/usr/bin/sudo /usr/bin/nice -n -10 /usr/bin/ionice -c1 /usr/sbin/tcpdump -i eth0 -n -s 0 -w /tmp/capture.cap host 87.88.221.5 or 89.80.250.70 and udp -c 90000 2> /tmp/drop_pendant_capture.txt

Pour arrêter proprement la capture si un script lance tcpdump en boucle : la commande a taper est : /usr/bin/sudo /usr/bin/killall -s INT tcpdump

Merci à Vivian du forum iperf

2 commentaires:

  1. pas mal le copier coller du site que je viens de voir juste avant !

    RépondreSupprimer
  2. Je ne m'en cache pas ! D'ailleurs, l'article d’origine provient du forum iperf que je n'ai pas oublié de remercier.

    Ce blog concentre juste certains sujets qui m'intéresse.
    Il n'est pas toujours nécessaire de réinventer le roue dès lors que l'on cite la source... non ?

    RépondreSupprimer