2016-06-16 7 views
0

Ich arbeite gerade an der Verwendung von Scapy zum Senden von Datenpaketen, und ich bin in ein seltsames Problem geraten. Wenn ich ein Paket als solches zu erstellen:Konvertieren eines Scapy-Pakets in eine Zeichenfolge erzeugt ein E?

pack = IP(dst="127.0.0.1", id=local_ID)/UDP()/chunk 

und dann dieses Paket in eine Zeichenfolge konvertiert (so kann ich es über eine Socket senden)

sendPack = str(pack) 

das Ergebnis sendPack falsch ist.

Zum Beispiel in meinem Test-Datei, habe ich die Zahlen von 1 bis 8000 bestellt als solche

1 
2 
3 
... 

dann, wenn ich print("SEND_PACK: "+sendPack) es produziert die folgenden:

E 
2 
3 
... 

Alles andere ist perfekt außer für die E

Ich kann nicht verstehen, wo das E herkommt, oder was es bedeutet.

Es ist auch erwähnenswert, dass ich überprüft habe, dass pack die richtigen Daten enthält, und das unabhängig davon, was die erste Zeile der Testdatei ist die erste Zeile der Ausgabe ist immer ein E

Dank!

Antwort

0

Zuerst drucken Sie ein Paket, nicht den Inhalt Ihres UDP-Datagramms. Die ersten beiden Felder eines IPv4-Pakets sind Version und IHL. Diese Werte lauten standardmäßig 4 (für IP-Version 4) und 5 (5 Wörter mit 32 Bits) in Scapy. Dies ergibt 45, wenn Sie es auf ein Byte in Hexadezimal setzen, das der Buchstabe "E" in ascii ist. Aus diesem Grund sehen Sie immer ein E als erstes Byte Ihrer Zeichenkette.

Wenn Sie überprüfen möchten, was in Ihrem Paket ist, sollten Sie Scapys show() Funktion verwenden: sendPack.show().

Zweitens Sie send() scapy die verwenden könnten, funktionieren Ihr Paket zu senden, ohne Steckdosen darum zu kümmern sich selbst: send(sendPack)

+0

Ok, so ist es eine Möglichkeit, nur den Inhalt des Datagramms zu bekommen? Ich kümmerte mich nur um die Ladung und ID für jedes Paket. – Swoldier

0

Die interessieren, befestigte ich das Problem, indem Sie folgendermaßen vorgehen:

Wie oben erwähnt, Das E war ein Ergebnis von mir, das Paket zu drucken, nicht sein Inhalt. Um den Inhalt zugreifen Ich wollte, musste ich folgendes tun:

sendPack = pack[UDP].load  #Get the packet's load at the UDP layer 
id = pack[IP].ID    #Get the ID at the IP layer 

Die Dokumentation für scapy ist spärlich, so habe ich nicht erkennen, dass ich die einzelnen Felder jedes Pakets auf diese Weise zugreifen konnte.

Hier where I found this fix