Вы находитесь на странице: 1из 4

Tcpdump - Lea Linux

Page1 sur 4

La-Linux & amis : LinuxFR GCU-Squad Zarb.Org GNU

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.

Prsentation d'une capture

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

11 packets captured : c'est lenombredepaquet quetcpdump a reu del'OS et a trait


22 packets received by filter : c'est lenombredepaquets qui ont t capturs car ils correspondaient aux filtres, cela nesignifiepas qu'ils auront t traits par
tcpdump

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.

Les options importantes


Voici unelistedes options importantes avec leurs utilits:
-S: permet tcpdump desuivreles sessions TCP, ainsi il calculera des numros desquencerelatif au premier numro desquencequ'il a reu. Cetteoption a
un contre-coup, ellefait consommer dela mmoireafin desauvegarder les informations sur les sessions en cours, donc nevous tonnez pas devoir la RAM
prisepar tcpdump grossir si cetteoption est active.
-p: dit tcpdump denepas passer l'interfaceen mode"promiscous", alors celui-ci nepourra capturer queles paquets qui sont adress la machinequi capture,
il n'analysera pas les autres paquets qui peuvent passer sur lecable. Notez quecela peut permettred'chapper aux outils dedtection desniffer (qui essayent de
savoir si unemachinedu rseau possdeuneinterfaceen mode"promiscous" par diverses techniques), mais cela fait depar la mmeoccasion perdreunepartie
del'intrt du sniffing.

http://lea-linux.org/documentations/Tcpdump

14/12/2014

Tcpdump - Lea Linux

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

Les rgles utiles


tcpdump dispose d'un filtre puissant des paquets nomms BPF (abrviation de BSD packet filter). Cette section ne dtaillera pas en profondeur toutes les possibilits
des filtres, mais se chargera de dtailler les exemples qui se trouvent dans le manuel. Vous tes donc invit lire le manuel si vous dsirez plus de prcisions (de plus
ces rgles, sont celles donnes en exemple dans le manuel).
Une rgle simple qui ne permet d'couter qu'un hte prcis :
tcpdump

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 \)

Tous les paquets IP entre l'hte 1 et le reste du rseau, sauf l'hte 2 :


tcpdump ip host hote1 and not hote2

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)'

Quelques exemples de capture


Une capture d'une session HTTP entre un client et son serveur
On veut ici couter le trafic entre tous les serveurs HTTP et tous leurs clients sur l'interface rseau eth0, on ne veut ici que 10 paquets qui vrifient cette rgle.
15:29:46.668822 IP (tos 0x0, ttl

#tcpdump -vv -i eth0 -X port http -c 10


64, id 10981, offset 0, flags [DF], proto: TCP (6), length: 608) 192.168.1.3.60963 > 192.168.1.100.http
: P 1:557(556) ack 1 win 46 <nop,nop,timestamp 2537037 1662948>
0x0000: 4500 0260 2ae5 4000 4006 89fb c0a8 0103 E..`*.@.@.......
0x0010: c0a8 0164 ee23 0050 55ef 9cb0 4dbd 2dde ...d.#.PU...M.-.
0x0020: 8018 002e 860a 0000 0101 080a 0026 b64d .............&.M
0x0030: 0019 5fe4 4745 5420 2f6d 6564 692f 2048 .._.GET./medi/.H
0x0040: 5454 502f 312e 310d 0a48 6f73 743a 2031 TTP/1.1..Host:.1
0x0050: 3932
92

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

Introspection d'une capture d'une session SSH


Ici, on inspecte une session ssh lance en local (ssh localhost).

# tcpdump -vv -i lo -XX port ssh


tcpdump: listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
15:27:21.166503 IP (tos 0x0, ttl 64, id 31969, offset 0, flags [DF], proto: TCP (6), length: 60) localhost.43630 > localhost.ssh: S, cksum 0x19bd (co
1276248378:1276248378(0) win 32792 <mss 16396,sackOK,timestamp 2391515 0,nop,wscale 7>
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 003c 7ce1 4000 4006 bfd8 7f00 0001 7f00 .<|.@.@.........
0x0020: 0001 aa6e 0016 4c12 013a 0000 0000 a002 ...n..L..:......
0x0030: 8018 19bd 0000 0204 400c 0402 080a 0024 ........@......$
0x0040: 7ddb 0000 0000 0103 0307
}.........
15:27:21.172752 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto: TCP (6), length: 60) localhost.ssh > localhost.43630: S, cksum 0x52d7 (correc
1282931829:1282931829(0) ack 1276248379 win 32768 <mss 16396,sackOK,timestamp 2391515 2391515,nop,wscale 7>
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 003c 0000 4000 4006 3cba 7f00 0001 7f00 .<..@.@.<.......
0x0020: 0001 0016 aa6e 4c77 fc75 4c12 013b a012 .....nLw.uL..;..
0x0030: 8000 52d7 0000 0204 400c 0402 080a 0024 ..R.....@......$
0x0040: 7ddb 0024 7ddb 0103 0307
}..$}.....
15:27:21.172868 IP (tos 0x0, ttl 64, id 31970, offset 0, flags [DF], proto: TCP (6), length: 52) localhost.43630 > localhost.ssh: ., cksum 0x3afa (co
1:1(0) ack 1 win 257 <nop,nop,timestamp 2391516 2391515>
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 0034 7ce2 4000 4006 bfdf 7f00 0001 7f00 .4|.@.@.........
0x0020: 0001 aa6e 0016 4c12 013b 4c77 fc76 8010 ...n..L..;Lw.v..
0x0030: 0101 3afa 0000 0101 080a 0024 7ddc 0024 ..:........$}..$
0x0040: 7ddb
}.
15:27:21.182235 IP (tos 0x0, ttl 64, id 33194, offset 0, flags [DF], proto: TCP (6), length: 72) localhost.ssh > localhost.43630: P, cksum 0xfe3c (in
(-> 0x8529), 1:21(20) ack 1 win 256 <nop,nop,timestamp 2391531 2391516>
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.

http://lea-linux.org/documentations/Tcpdump

14/12/2014

Tcpdump - Lea Linux

15:27:21.184787 IP (tos 0x0, ttl

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

Je n'arrive pas capturer


Voici quelques indices pour vous aider trouver le problme dans un cas gnral :
Vous n'coutez pas la bonne interface rseau, bte, mais a peut arriver, surtout si vous ne prcisez pas tcpdump l'interface rseau couter alors que vous en
avez plusieurs ;
Vous tes sur un switch, celui-ci n'est sens diriger que votre trafic sur le rseau, donc si vous avez une machine qui agit comme une sonde (c'est dire sans
adresse IP, qui se contente d'couter) il se peut que le switch n'ait pas de paquets pour vous. Certains switchs d'assez haut niveau ont des options de
configurations afin de mettre certains ports en recopie de tout le trafic (afin justement de pouvoir l'analyser). Il existe certaines techniques pour faire passer un
switch en hub (c'est dire rpter les paquets sur tous les ports) mais comme ceci constitue une forme d'attaque, cela ne sera pas dvelopp ici (de plus, les
nouveaux switchs sont de moins en moins vulnrables ces attaques) ;
Vous n'avez pas mis votre interface rseau en mode "promiscous". Le mode "promiscous" est le mode o la carte peut lire tous les paquets du rseau, mme
ceux qui ne lui sont pas destin (avec une adresse MAC diffrente de la sienne par exemple pour une carte Ethernet). Normalement, tcpdump passe
automatiquement les interfaces en mode "promiscous", si ce n'est pas le cas chez vous, c'est probablement qu'il n'a pas russi, dans ce cas c'est que votre carte
rseau ne supporte pas le mode "promiscous".

Je ne capture que mon trafic


Si c'est le cas, comme explicit plus haut, vous tes surement dans une des deux configurations suivantes:

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.

Je ne capture rien part de l'ARP


Il est fortement probable que vous soyez alors sur un switch que ne vous recopie pas tous les paquets sur votre interface. Vous recevez alors les paquets ARP de
l'annonce de nouvelles machines ou autre (en fait, il suffit que l'adresse MAC soit celle de broadcast). Cela doit vous conforter dans l'ide d'tre sur un switch si vous
ne recevez que ces paquets.

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.

@ Retour la rubrique Rseau et scurit

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

Tcpdump - Lea Linux

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