{"id":521,"date":"2009-06-03T18:22:42","date_gmt":"2009-06-03T16:22:42","guid":{"rendered":"http:\/\/linux.leunen.com\/?p=521"},"modified":"2009-06-03T18:22:42","modified_gmt":"2009-06-03T16:22:42","slug":"analyse-reseau-avec-tcpdump","status":"publish","type":"post","link":"https:\/\/www.leunen.com\/linux\/2009\/06\/analyse-reseau-avec-tcpdump\/","title":{"rendered":"Analyse r\u00e9seau avec tcpdump"},"content":{"rendered":"<p><em>tcpdump<\/em> est un outil d&rsquo;analyse des paquets transitant sur le r\u00e9seau. Ses possibilit\u00e9s sont tr\u00e8s \u00e9tendues et en font un outil de base pour l&rsquo;analyse permettant de r\u00e9soudre les probl\u00e8mes r\u00e9seau et de s\u00e9curit\u00e9. Il peut aussi \u00eatre utile simplement parce que vous \u00eates int\u00e9ress\u00e9 d&rsquo;examiner ce qui transite sur votre r\u00e9seau. On verra aussi qu&rsquo;il est possible de sauvegarder les paquets filtr\u00e9s par <em>tcpdump<\/em> pour les relire sur une machine \u00e9quip\u00e9e de <em>Wireshark<\/em>. L&rsquo;avantage est \u00e9videmment de pouvoir profiter de la lisibilit\u00e9 que donne une application graphique.<\/p>\n<p>On peut passer \u00e0 <em>tcpdump<\/em> un certain nombre d&rsquo;options et des expressions bool\u00e9ennes. Les options agissent sur la fa\u00e7on dont seront repr\u00e9sent\u00e9s les paquets une fois que ceux-ci auront \u00e9t\u00e9 captur\u00e9s. Les expressions permettent de ne capturer que les paquets qui nous int\u00e9ressent. Ces expressions peuvent \u00eatre combin\u00e9es au moyen d&rsquo;op\u00e9rateur bool\u00e9ens (<em>and<\/em>, <em>or<\/em>,&#8230;) pour former un filtre qui ne laissera passer que les paquets d\u00e9sir\u00e9s.<\/p>\n<p>Avant de pouvoir utiliser <em>tcpdump<\/em>, il faut l&rsquo;installer:<\/p>\n<pre class=\"codesource\">\r\n$ sudo aptitude install tcpdump\r\n<\/pre>\n<p>et il faut le lancer avec des droits d&rsquo;administrations pour pouvoir avoir acc\u00e8s aux interfaces r\u00e9seau.<\/p>\n<h3>Les options<\/h3>\n<ul>\n<li>-i ethx sp\u00e9cifie sur quelle interface se fait la capture<\/li>\n<li>-X affiche le contenu du paquet en hexa et ascii<\/li>\n<li>-n pas de r\u00e9solution des noms, on affiche l&rsquo;adresse IP<\/li>\n<li>-nn pas de r\u00e9solution des noms ni des ports<\/li>\n<li>-s0 indique qu&rsquo;on capture le paquet entier<\/li>\n<li>-cx on capture seulement x paquets<\/li>\n<li>-v, -vv, -vvv augmente le nombre d&rsquo;infos sur les paquets qui sont affich\u00e9s<\/li>\n<li>-w file \u00e9crit les paquets raw dans un fichier plut\u00f4t que d&rsquo;\u00eatre trait\u00e9s et affich\u00e9s<\/li>\n<\/ul>\n<p>exemple:<\/p>\n<pre class=\"codesource\">\r\n$ sudo tcpdump -Xvvn\r\n<\/pre>\n<p>rafra\u00eechissez la page dans votre navigateur et observez.<\/p>\n<h3>Les expressions<\/h3>\n<p>Les expressions associ\u00e9es aux op\u00e9rations bool\u00e9ennes permettent d&rsquo;effectuer un puissant filtrage sur les paquets et en fin de compte de n&rsquo;afficher que ce qui vous int\u00e9resse.<\/p>\n<ul>\n<li>host permet de sp\u00e9cifier une adresse IP ou un nom d&rsquo;h\u00f4te:\n<pre>ex: tcpdump host 192.168.8.1<\/pre>\n<\/li>\n<li>src, dst sp\u00e9cifie une adresse IP source ou destination\n<pre>ex: tcpdump dst 192.168.8.1<\/pre>\n<\/li>\n<li>net sp\u00e9cifie un r\u00e9seau (notation CIDR)\n<pre>ex: tcpdump net 192.168.8.0\/24<\/pre>\n<\/li>\n<li>port sp\u00e9cifie un port sur lequel la capture se fera (peut \u00eatre combin\u00e9 avec src ou dst)\n<pre>ex: tcpdump port 80<br \/>\r\n    tcpdump src port 80<\/pre>\n<\/li>\n<li>proto sp\u00e9cifie le protocole utilis\u00e9 (tcp, udp, and icmp)\n<pre>ex: tcpdump icmp<\/pre>\n<\/li>\n<\/ul>\n<h3>Les op\u00e9rateurs logiques<\/h3>\n<ul>\n<li>and (ou &#038;&#038;)<\/li>\n<li>or (ou ||)<\/li>\n<li>not (ou !)<\/li>\n<\/ul>\n<p>Pour les op\u00e9rations complexes avec des parenth\u00e8ses, les options doivent \u00eatre encadr\u00e9es par des apostrophes.<\/p>\n<p>exemples:<\/p>\n<pre class=\"codesource\">\r\n$ sudo tcpdump -Xvvnn src 192.168.8.10 and dst 192.168.8.1\r\n$ sudo tcpdump 'src 192.168.8.10 and (dst port 110 or 25)'\r\n<\/pre>\n<h3>Filtrage suivant les flags TCP<\/h3>\n<p>Il est possible aussi de filtrer en fonction des flags contenus dans l&rsquo;ent\u00eate TCP. Ces flags sont:<\/p>\n<ul>\n<li>SYN-ACK  &lsquo;tcp[13] = 18&rsquo;<\/li>\n<li>FIN      &lsquo;tcp[13] &#038; 1 != 0&rsquo;<\/li>\n<li>SYN      &lsquo;tcp[13] &#038; 2 != 0&rsquo;<\/li>\n<li>RST      &lsquo;tcp[13] &#038; 4 != 0&rsquo;<\/li>\n<li>PSH      &lsquo;tcp[13] &#038; 8 != 0&rsquo;<\/li>\n<li>ACK      &lsquo;tcp[13] &#038; 16 != 0&rsquo;<\/li>\n<li>URG      &lsquo;tcp[13] &#038; 32 != 0&rsquo;<\/li>\n<\/ul>\n<p>Ceci signifie qu&rsquo;on prend le 13i\u00e8me octet dans l&rsquo;ent\u00eate TCP (tcp[13]). Chaque bit de cet octet repr\u00e9sente un flag. On effectue ensuite une op\u00e9ration logique pour obtenir la valeur de ce bit et on le test par rapport \u00e0 0.<\/p>\n<p>exemple:<\/p>\n<pre class=\"codesource\">\r\n$ sudo tcpdump 'tcp[13] & 2 != 0'\r\n<\/pre>\n<h3>Exploitation des paquets avec Wireshark<\/h3>\n<p>Il est possible d&rsquo;enregistrer les paquets captur\u00e9s dans un fichier et ainsi de les analyser plus tard, sur une autre machine \u00e9ventuellement, avec <em>Wireshark<\/em> et de b\u00e9n\u00e9ficier des avantages d&rsquo;une repr\u00e9sentation graphique des paquets. On utilisera cette m\u00e9thode, par exemple, lorsque l&rsquo;on doit analyser les paquets arrivant sur un serveur ne disposant pas d&rsquo;interface graphique permettant de faire tourner <em>Wireshark<\/em>.<\/p>\n<p>L&rsquo;enregistrement des paquets se fait en utilisant l&rsquo;option <em>-w<\/em> qui dit \u00e0 <em>tcpdump<\/em> d&rsquo;enregister les paquets bruts dans un fichier. Par exemple:<\/p>\n<pre class=\"codesource\">\r\n$ sudo tcpdump -Xvvnns0 port 80 -w dump.cap\r\n<\/pre>\n<p>Ensuite il ne reste plus qu&rsquo;\u00e0 analyser le fichier <em>dump.cap<\/em> dans <em>Wireshark<\/em> en le lan\u00e7ant avec le nom de fichier en argument:<\/p>\n<pre class=\"codesource\">\r\n$ wireshark -r dump.cap\r\n<\/pre>\n<p>Note: on peut \u00e9videmment aussi ouvrir le fichier en utilisant l&rsquo;interface graphique de <em>Wireshark<\/em> mais comme tout le reste se fait dans un terminal, pourquoi ne pas lancer <em>Wireshark<\/em> directement depuis le terminal? Non?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>tcpdump est un outil d&rsquo;analyse des paquets transitant sur le r\u00e9seau. Ses possibilit\u00e9s sont tr\u00e8s \u00e9tendues et en font un outil de base pour l&rsquo;analyse permettant de r\u00e9soudre les probl\u00e8mes r\u00e9seau et de s\u00e9curit\u00e9. Il peut aussi \u00eatre utile simplement parce que vous \u00eates int\u00e9ress\u00e9 d&rsquo;examiner ce qui transite sur votre r\u00e9seau. On verra aussi [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[12,5],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/521"}],"collection":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/comments?post=521"}],"version-history":[{"count":6,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/521\/revisions"}],"predecessor-version":[{"id":527,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/521\/revisions\/527"}],"wp:attachment":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/media?parent=521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/categories?post=521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/tags?post=521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}