Documente Academic
Documente Profesional
Documente Cultură
Page1 sur 4
Tcpdump
PageDiscussion LireChangements en attenteVoir letextesourceHistorique
Sommaire
Introduction tcpdump
Par Tony
L'outil
tcpdump est un outil decaptureet d'analyserseau. Il permet d'avoir uneanalyseen direct du rseau ou d'enregistrer la capturedans un fichier afin del'analyser pour
plus tard. Il permet d'criredes filtres afin deslectionner les paquets capturer/analyser.
Il est bas sur la libpcap pour la capture, cequi permet ses sauvegardes d'trecompatibleavec d'autres analyseurs rseaux, commeWireshark (anciennement
Ethereal). Cettebibliothquetant multiplateforme, tcpdump est lui aussi port sur la plupart des architectures.
C'est un outil indispensable l'administration et au dbugaged'applications rseaux.
# tcpdump -n -i ppp0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ppp0, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
01:04:28.531663 IP 71.197.145.153.46872 > 90.2.255.58.37727: . ack 816315239 win 65535 <nop,nop,timestamp 20729106 202488928>
01:04:28.539138 IP 90.2.255.58.37727 > 71.197.145.153.46872: . 9801:11201(1400) ack 0 win 2003 <nop,nop,timestamp 202489014 20729106>
01:04:28.569227 IP 81.242.185.212.17936 > 90.2.255.58.38835: . ack 1861880354 win 63552 <nop,nop,timestamp 522312 202488943,nop,nop,sack 1 {2801:4201}
01:04:28.569286 IP 90.2.255.58.38835 > 81.242.185.212.17936: . 4201:5601(1400) ack 0 win 182 <nop,nop,timestamp 202489023 522312>
01:04:28.586301 IP 71.197.145.153.46872 > 90.2.255.58.37727: . ack 2801 win 65535 <nop,nop,timestamp 20729106 202488950>
01:04:28.586362 IP 90.2.255.58.37727 > 71.197.145.153.46872: . 11201:12601(1400) ack 0 win 2003 <nop,nop,timestamp 202489027 20729106>
01:04:28.609962 IP 71.197.145.153.46872 > 90.2.255.58.37727: . ack 5601 win 65535 <nop,nop,timestamp 20729107 202488958>
01:04:28.610020 IP 90.2.255.58.37727 > 71.197.145.153.46872: . 12601:14001(1400) ack 0 win 2003 <nop,nop,timestamp 202489033 20729107>
01:04:28.646915 IP 71.197.145.153.46872 > 90.2.255.58.37727: . ack 8401 win 65535 <nop,nop,timestamp 20729107 202488966>
01:04:28.646977 IP 90.2.255.58.37727 > 71.197.145.153.46872: . 14001:15401(1400) ack 0 win 2003 <nop,nop,timestamp 202489042 20729107>
01:04:28.647007 IP 90.2.255.58.37727 > 71.197.145.153.46872: . 15401:16801(1400) ack 0 win 2003 <nop,nop,timestamp 202489042 20729107>
11 packets captured
22 packets received by filter
0 packets dropped by kernel
Les options avec lesquelles ont t invoques tcpdump nesont pas importantes ici. Elles sont dtailles la section suivante.
Dtails champ champ dela lignebleue(attention, leformat desortiedpend du typedeprotocoleanalys et des options passes) :
l'heure
letypedeprotocole(ici, IP)
l'IP source.port_source> l'IP destination.port_destination
les flags TCP : il peut y en avoir plusieurs pour un mmepaquet, on verra apparatreles lettres suivantes pour symboliser un drapeau lev :
S (SYN)
F (FIN)
P (PUSH)
R (RST)
W (ECN CWR)
E (ECN-Echo)
ou justeun point commeici quand on n'a pas dedrapeaux
ack numro : lenumro desquencequel'on attend dela part del'autreinterlocuteur son prochain envoiedepaquets
win numro : lenumro reprsentela tailledela fentreTCP
<des options> : les options TCP portes par lepaquet, ici, on n'a queletimestamp
Les trois dernires lignes dela capturereprsentent :
0 packets dropped by kernel : les paquets qui n'ont pas t capturs par l'OS car il n'y avait pas assez deplacedans son buffer derception.
http://lea-linux.org/documentations/Tcpdump
14/12/2014
Page 2 sur 4
-n: tcpdump ne convertira pas les adresses et les numros de ports en leurs noms. Pour les numros de ports, en gnral, ce n'est pas bien grave, cela ne prend
pas beaucoup de temps (c'est en local), mais pour les adresses, la recherche inverse de DNS peut-tre un peu longue, elle peut alors ralentir TPCdump.
-i nom_interface : permet de choisir l'interface d'coute. Par dfaut, tcpdump coute la premire interface qu'il trouve. Si vous souhaitez couter toutes vos
interfaces la fois, vous pouvez spcifier "any" la place d'un nom d'interface, cela aura pour effet d'couter TOUTES vos interfaces. (sous GNU/Linux
"ifconfig -a" vous affiche toutes les interfaces rseaux de votre machine)
-w lefichier.pcap : enregistre toute la capture dans le fichier fichier.pcap. Cela permet de ranalyser le trafic plus tard. Le format PCAP tant reconnu par
Wireshark, cela permet de donner le fichier analyser Wireshark pour une analyse plus fine des champs.
-r lefichier.pcap : le complmentaire de l'option prcdente, qui permet de relire un fichier d'une session prcdente. Peut notamment tre utilis sur une
machine qui n'a pas le rseau ou autre pour une analyse post-mortem.
-s taille_de_la_capture : la taille de la fentre de capture. C'est la taille maximale que pourra faire un paquet captur, au-del de cette taille, la fin du paquet
sera tronque. Il peut tre parfois intressant de capturer les paquets complets, dans ce cas, il est possible de spcifier comme taille de capture 0 et tcpdump
capturera alors l'intgralit du paquet quelque soit sa taille.
-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosit. Le nombre de 'v' correspond au niveau de verbosit.
-X : affiche les paquets en hexadcimal et en ASCII. Assez utile pour analyser les protocoles bass sur le texte (HTTP, POP3, etc).
host le_nom_de_lhote
Une rgle un peu plus complexe qui coute une ht prcis et son port :
tcpdump host le_nom_de_lhote port le_port
couter tout le trafic entre l'hte 1 et l'hte 2 ou 3 (les antislashs devant les parenthses servent ne pas faire interprter ses dernires par un shell) :
tcpdump host hote1 and \( hote2 or hote3 \)
Pour afficher les paquets SYN et le paquets FIN de chaque session TCP d'un hte qui n'est pas sur notre rseau :
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net ladresse_du_reseau_local'
Pour afficher tous les paquets HTTP sur IPv4 qui viennent ou arrivent sur le port 80 et qui ne contiennent que des donnes (pas de SYN, pas de FIN, pas de paquet ne
contenant qu'un ACK):
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
On note ici l'intrt d'afficher en hexadcimal et en ASCII le paquet car comme le protocole HTTP est un protocole texte, on peut y voir des informations
intressantes. On voit clairement ici que le client fait une GET sur le serveur (on savait dj que c'tait le client qui envoyait des informations au serveur sur ce
paquet, mais sans l'affichage en mode ASCII, on aurait eu plus de mal dfinir l'action exacte).
http://lea-linux.org/documentations/Tcpdump
14/12/2014
Page 3 sur 4
0x0010: 0048 81aa 4000 4006 bb03 7f00 0001 7f00 .H..@.@.........
0x0020: 0001 0016 aa6e 4c77 fc76 4c12 013b 8018 .....nLw.vL..;..
0x0030: 0100 fe3c 0000 0101 080a 0024 7deb 0024 ...<.......$}..$
0x0040: 7ddc 5353 482d 322e 302d 4f70 656e 5353 }.SSH-2.0-OpenSS
0x0050: 485f 342e 330a
H_4.3.
64, id 31971, offset 0, flags [DF], proto: TCP (6), length: 52) localhost.43630 > localhost.ssh: ., cksum 0x3ac4 (co
1:1(0) ack 21 win 257 <nop,nop,timestamp 2391534 2391531>
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 0034 7ce3 4000 4006 bfde 7f00 0001 7f00 .4|.@.@.........
0x0020: 0001 aa6e 0016 4c12 013b 4c77 fc8a 8010 ...n..L..;Lw....
0x0030: 0101 3ac4 0000 0101 080a 0024 7dee 0024 ..:........$}..$
0x0040: 7deb
Ici, on a trs peu d'informations. Tout le contraire d'un protocole texte, car en plus, celui-ci est chiffr. Les seuls informations visibles l'oeil sont que l'on coute une
session TCP qui se passe sur le port SSH par dfaut et que le client se connecte sur un serveur OpenSSH en version 4.3 (la version du protocole SSH est 2.0 par
contre).
Vous n'tes pas en mode "promiscous", moins que vous ayez expressment spcifi tcpdump de ne pas s'y mettre, c'est srement un problme de carte
rseau ;
Vous tes sur un switch.
J'ai toujours quelques (voire un nombre important de) paquets qui sont "dropped by kernel"
Bon, en fait, je ne sais pas si c'est un problme connu ou non, mais quand il y a un trafic trop important de paquets, il arrive que la machine n'arrive pas traiter assez
rapidement les paquets et finisse par les "dropper" (rejeter). Vous pouvez faire gagner du temps CPU en ne faisant pas traiter les paquets en live et en crivant dans un
fichier, ou vous pouvez vous attaquer au corps du problme. Le problme vient de la taille de la socket de rcption qui en gnral est trop petite. Voici chez moi, la
taille de la socket d'coute par dfaut et la taille maximale :
#sysctl net.core.rmem_default
net.core.rmem_default = 506880
#sysctl net.core.rmem_max
net.core.rmem_max = 506880
C'est parfois un peu trop petit pour un trafic important, pour rgler ce problme, il suffit d'augmenter la taille de la socket, on peut faire comme il suit:
# sysctl net.core.rmem_max=1013760
net.core.rmem_max = 1013760
# sysctl net.core.rmem_default=1013760
net.core.rmem_default = 1013760
Ici, je me suis content de doubler ces valeurs. Vous pouvez bien entendu encore les augmenter. Mais sachez que cette mthode va allouer un buffer de la taille que
vous fixerez pour chaque socket d'coute. Donc sur une machine qui n'est pas ddie l'coute, vous ne pourrez pas trop monter cette valeur (la machine risque
d'avoir beaucoup de socket d'ouverte, donc un besoin d'allouer beaucoup de mmoire).
Il existe un patch non officiel pour la libpcap (sur laquelle se base tcpdump) pour pouvoir changer la taille de la socket d'coute (ce qui reviendrait ici modifier
net.core.rmem_max pour l'augmenter et modifier la socket de la libpcap afin d'augmenter sa taille, mais ne pas augmenter cette taille pour tous les programmes).
Liens utiles
Les liens suivants sont en anglais, ils pointent pour la plupart vers certaines parties du site officiel :
http://www.tcpdump.org/faq.html : les questions frquemment poses, les problmes les plus rencontrs.
Copyright
2007, 2010 Tony Cheneau
Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free
Documentation License, Version 1.2 ou n'importe quelle version ultrieure publie par la Free Software Foundation;
http://lea-linux.org/documentations/Tcpdump
14/12/2014
Page 4 sur 4
sans section invariante, sans page de garde, sans entte et sans page finale. Pour plus d'informations consulter le site
de l'APRIL.
Rcupre de http://lea-linux.org/docs/index.php?title=Tcpdump&oldid=18205
Catgories :
Rseau local
GFDL
Affichages
Aller : Navigation, rechercher
Ceci est la version publie, vrifie le 25 octobre 2010. Il y a des changements de modle ou de fichiers en attente de relecture.
tat : Endroit vrifi Profondeur: De base Lisibilit: Acceptable
Outils personnels
Crer un compte
Connexion
Navigation
Accueil
Modifications rcentes
Page au hasard
Aide
Rechercher
Lire
Rechercher
Pages spciales
Pages lies
Suivi des pages lies
Pages spciales
Version imprimable
Adresse de cette version
La-Linux
Contacts
Confidentialits
Faire un don
Fortunes
Documentations
Dcouvrir Linux
Fiches pratiques
Trucs & Astuces
Lannuaire
Logithque
Drivothque
Rubriques
Installation
Environnement graphique
Matriel
Logiciel
Rseau
Administration
Noyau et modules
Dveloppement
La-Avanc
La communaut
Forums
Mailing-List
IRC
Cette page a t consulte 23 150 fois. Le contenu est disponible sous licence Attribution-Share Alike 3.0 Unported sauf mention contraire. Politique de
confidentialit propos de Lea Linux Avertissements
Serveur hberg par ST-Hebergement et Lost-Oasis / IRC hberg par FreeNode / NS secondaire hberg par XName
Sauf mention contraire, les documentations publies sont sous licence Creative-Commons CC-BY-SA
Dernire modification de cette page le 25 octobre 2010 16:22.
http://lea-linux.org/documentations/Tcpdump
14/12/2014