2010-11-22 16 views
4

Ich begann vor kurzem mit der Erforschung von Scapy. Ein wunderbares Werkzeug in der Tat!ICMP Ping-Paket erzeugt keine Antwort bei der Verwendung von Scapy

Ich habe ein Problem ... Wenn ich meine Netzwerkkarte mit Wireshark überwachen und ich einen regelmäßigen Ping von der Systemeingabeaufforderung mit der Standard-PING-Installation mache, erscheint wireshark mit "Ping-Anfrage" und dann "Ping-Antwort" Hinweis, dass es eine Antwort gesendet hat. Aber wenn ich es manuell in Scapy mache, sendet es keine Antwort zurück. Wie kann das sein? Ich verbrachte viel Zeit damit, um dies herauszufinden, damit ich wirklich hoffe, jemand zu diesem Thema von mir kann etwas Licht ...

Hier ist der Code i verwendet:

>>> from scapy.all import IP, ICMP, send 
>>> IP = IP(dst="127.0.0.1") 
>>> Ping = ICMP() 
>>> send(IP/Ping) 

Das Paket erfolgreich gesendet wird und Wireshark zeigt eine empfangene Ping-Anfrage an, aber nicht, dass sie eine Antwort zurückgeschickt hat.

Antwort

5

Speicherung Dies ist ein FAQ item:

Ich kann nicht ping 127.0.0.1. Scapy funktioniert nicht mit 127.0.0.1 oder auf der Loopback-Schnittstelle

Die Loopback-Schnittstelle ist eine sehr spezielle Schnittstelle. Pakete, die durch sie gehen, werden nicht wirklich zusammengebaut und demontiert. Der Kernel routet das Paket zu seinem Ziel, während es noch eine interne Struktur gespeichert ist. Was Sie mit tcpdump -i lo sehen, ist nur eine Fälschung, damit Sie denken, dass alles normal ist. Der Kernel weiß nicht, was Scapy hinter seinem Rücken macht, also was Sie auf der Loopback-Oberfläche sehen, ist auch eine Fälschung. Außer dieser war nicht von einer lokalen Struktur. Daher wird der Kernel es niemals empfangen.

Um lokale Anwendungen zu sprechen, müssen Sie Ihre Pakete eine Schicht ober, unter Verwendung eines PF_INET/SOCK_RAW Buchse anstelle eines PF_PACKET/SOCK_RAW (oder dessen Äquivalent zu anderen Systemen, die Linux) bauen:

>>> conf.L3socket 
<class __main__.L3PacketSocket at 0xb7bdf5fc> 
>>> conf.L3socket=L3RawSocket 
>>> sr1(IP(dst="127.0.0.1")/ICMP()) 
<IP version=4L ihl=5L tos=0x0 len=28 id=40953 flags= frag=0L ttl=64 proto=ICMP chksum=0xdce5 src=127.0.0.1 dst=127.0.0.1 options='' |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |>> 
+0

Ich habe meine Antwort dort gefunden. Anscheinend ist die Loopback-Schnittstelle "falsch", das wusste ich nicht. Vielen Dank! – Andesay

+0

Mit "Fake" meinen sie, dass sie niemals Ethernet-Pakete erzeugt. Stattdessen werden IP-Pakete direkt vom Sender zum Empfänger "übertragen" (d. H. Kopiert). Das ist der springende Punkt der Loopback-Schnittstelle. –

0

Versuchen Sie, diese

def ping(host, repeat=3): 
    packet = IP(dst=host)/ICMP() 
    for x in range(repeat): 
     response = sr1(packet) 
     response.show2() 

Ihr die Antwort nicht richtig

+0

Noch hat nicht funktioniert .. Wireshark zeigt nur die Anfrage .. Hier ist ein Screenshot von einem scapy Ping: http://tinypic.com/r/27z9ru9/7 und hier von einer normalen Standard-Installation Ping: http://tinypic.com/r/m7rleb/ – Andesay

+0

Sind Sie sicher, dass etwas die Antwort nicht blockiert? –

+0

Hmmm ich weiß nicht, was das sein sollte, wenn ein normaler Ping funktioniert .. Ich benutze Standard-TTL, Flags und so weiter, könnte es das sein? – Andesay

Verwandte Themen