{"id":162,"date":"2010-05-02T19:16:00","date_gmt":"2010-05-02T17:16:00","guid":{"rendered":"http:\/\/eguaj.tumblr.com\/post\/566076683"},"modified":"2010-05-02T19:16:00","modified_gmt":"2010-05-02T17:16:00","slug":"566076683","status":"publish","type":"post","link":"https:\/\/locallost.net\/?p=162","title":{"rendered":"Scapy"},"content":{"rendered":"<p>Vous \u00eates du genre \u00e0 parler couramment SMTP, POP3, IMAP et HTTP en utilisant `<a href=\"http:\/\/netcat.sourceforge.net\/\">nc<\/a>' ou `telnet'&#160;?  Alors vous aimerez s\u00fbrement <a href=\"http:\/\/www.secdev.org\/projects\/scapy\/\">Scapy<\/a>.<\/p>\n<p>Scapy c'est un peu le `nc' pour les protocoles TCP, IP et Ethernet (en fait \u00e7a couvre tout le spectre des couches du mod\u00e8le OSI). Avec lui vous pouvez donc, par exemple, construire \u00e0-la-main vos paquets TCP, mettre \u00e7a dans un paquet IP, et finalement envoyer le tout encapsul\u00e9 en 802.3 sur votre interface r\u00e9seau.<\/p>\n<p>Qu'est-ce qu'on peut donc faire avec Scapy&#160;?<\/p>\n<p><!-- more --><\/p>\n<p>Par exemple, une question qui me trotte dans la t\u00eate depuis un moment&#160;: sur un LAN, est-ce qu'il est possible de pinguer une machine distante sur son adresse de loopback `127.0.0.1'&#160;? Apr\u00e8s tout, il est possible de pinguer l'adresse IP d'une interface qui n'est sur ce LAN, alors pourquoi pas l'adresse de l'interface de loopback&#160;?<\/p>\n<p>D'abord, comment envoyer un ping `echo-request' classique.<\/p>\n<p>Soit la machine A d'adresse IP `ip_A' et d'adresse mac `mac_A', et une machine cible B d'adresse IP `ip_B' et d'adresse mac `mac_B'&#160;:<\/p>\n<blockquote>\n<pre>&gt;&gt;&gt; ip_A=\"192.168.1.101\"<br\/>&gt;&gt;&gt; ip_B=\"192.168.1.1\"<br\/>&gt;&gt;&gt; sendp(Ether()\/IP(src=ip_A,dst=ip_B)\/ICMP(type=\"echo-request\",code=0,id=0x1))<br\/>.<br\/>Sent 1 packets.<br\/><\/pre>\n<\/blockquote>\n<p>Un coup de tcpdump en parall\u00e8le et on voit effectivement le `echo-request' partir, et un `echo-reply' en r\u00e9ponse.  On peut aussi utiliser `srp()' \u00e0 la place de `sendp()' pour que Scapy attende la r\u00e9ponse&#160;:<\/p>\n<blockquote>\n<pre>&gt;&gt;&gt; srp(Ether()\/IP(src=ip_A,dst=ip_B)\/ICMP(type=\"echo-request\",code=0,id=0x2))Begin emission:<br\/>Finished to send 1 packets.<br\/>.*<br\/>Received 2 packets, got 1 answers, remaining 0 packets<br\/>(&lt;Results: TCP:0 UDP:0 ICMP:1 Other:0&gt;, &lt;Unanswered: TCP:0 UDP:0 ICMP:0 Other:0&gt;)<br\/><\/pre>\n<\/blockquote>\n<p>Bon, maintenant comment pinguer le `127.0.0.1' de cette machine B&#160;?<\/p>\n<p>On va envoyer un paquet ICMP \u00e0 destination de l'IP `127.0.0.1' mais en for\u00e7ant l'adresse MAC de destination \u00e0 `mac_B'&#160;:<\/p>\n<blockquote>\n<pre>&gt;&gt;&gt; ip_A=\"192.168.1.101\"<br\/>&gt;&gt;&gt; ip_B=\"127.0.0.1\"<br\/>&gt;&gt;&gt; mac_A=\"0:16:de:ad:be:ef\"<br\/>&gt;&gt;&gt; mac_B=\"0:18:ca:fe:ba:be\"<br\/>&gt;&gt;&gt; srp(Ether(dst=mac_B)\/IP(src=ip_A,dst=ip_B)\/ICMP(type=\"echo-request\",code=0,id=0x3))<br\/>Begin emission:<br\/>Finished to send 1 packets.<br\/>..........................^C<br\/>Received 164 packets, got 0 answers, remaining 1 packets<br\/>(&lt;Results: TCP:0 UDP:0 ICMP:0 Other:0&gt;, &lt;Unanswered: TCP:0 UDP:0 ICMP:1 Other:0&gt;)<br\/><\/pre>\n<\/blockquote>\n<p>Un tcpdump sur la machine distante montre que le paquet est bien re\u00e7u, mais par contre aucune r\u00e9ponse n'est \u00e9mise\u2026 Cela ne semble donc pas \u00eatre possible, du moins avec un Linksys WRT54G ex\u00e9cutant OpenWRT.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vous \u00eates du genre \u00e0 parler couramment SMTP, POP3, IMAP et HTTP en utilisant `nc&rsquo; ou `telnet&rsquo;&#160;? Alors vous aimerez s\u00fbrement Scapy. Scapy c&rsquo;est un peu le `nc&rsquo; pour les protocoles TCP, IP et Ethernet (en fait \u00e7a couvre tout &hellip; <a href=\"https:\/\/locallost.net\/?p=162\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[10],"tags":[],"class_list":["post-162","post","type-post","status-publish","format-standard","hentry","category-regular"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2Bei9-2C","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/locallost.net\/index.php?rest_route=\/wp\/v2\/posts\/162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/locallost.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/locallost.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/locallost.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/locallost.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=162"}],"version-history":[{"count":0,"href":"https:\/\/locallost.net\/index.php?rest_route=\/wp\/v2\/posts\/162\/revisions"}],"wp:attachment":[{"href":"https:\/\/locallost.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/locallost.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/locallost.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}