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.
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
# 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.
# 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