Scotion: Wie bekomme ich den vollständigen IP-Paket-Header?

In Scapy möchte ich Pakete mit den entsprechenden ICMP-Zeitüberschreitungen manuell übereinstimmen.

Ich muss passen:

  • IP-in-ICMP-Feld des ICMP-Pakets
  • IP-Header und erste 8 Bytes meines Datenpakets Das ICMP-Paket ist kein Problem:

    IcmpPayload = str (icmpPacket [ICMP] .payload)

Was die ersten 8 Bytes des Datenpakets betrifft, muss ich nur noch tun:

str(myPacket[IP].payload)[:8] 

Ich weiß nicht, wie man nur den IP-Header von myPacket . Alles was ich jetzt mache, ersetzt die Nutzlast im ganzen Paket mit den ersten 8 Bytes. Diese Suche und ersetzen, wenn auf Tausende von Paketen angewendet werden, kann zu lange dauern, ich fürchte:

  strOfMyPacket = str(myPacket[IP]) strOfMyPacket.replace(str(myPacket[IP].payload),str(myPacket[IP].payload)[:8],1) 

Irgendein schnellerer Weg, der mich einfach dazu führen lässt?

  partOfPayload = str(myPacket[IP].payload)[:8] fullHeader = _______ stringToCompare = fullHeader + partOfPayload 

2 Solutions collect form web for “Scotion: Wie bekomme ich den vollständigen IP-Paket-Header?”

 str(myPacket)[:(myPacket[IP].ihl * 4)] 

Die IP-Header-Länge befindet sich im Feld ihl (Internet-Header-Länge). Es wird als die Anzahl der 32-Bit-Wörter dargestellt, die der Header verwendet. (Es ist aufgrund des Bereichs 'Optionen' des Headers variabel). Also, wenn wir dieses Feld mit 32 multiplizieren und dann durch 8 (oder * 4) teilen, erhalten wir die Anzahl der Bytes, die der Header füllt, ob hat Optionen oder nicht.

Ich bin überrascht, dass es keine Methode gibt (die ich finden könnte), um die IP-Header ohne die unteren Schichten zurückzugeben.

http://de.wikipedia.org/wiki/IPv4_header#Header

Falls jemand anderes in diese Frage stößt, denke ich, dass du die Funktion remove_payload () der Klasse Packet (von IP geerbt) verwenden kannst. Das sollte einfach den Header verlassen. Ich bin neu in der Verschwendung, aber es sieht so aus, als würde ich es beim Dolmetscher ausprobieren.

 >>> ip = IP(dst='10.0.0.1', src='10.0.0.14', ttl=255)/ICMP() >>> hexdump(ip) 0000 45 00 00 1C 00 01 00 00 FF 01 A7 D1 0A 00 00 0E E............... 0010 0A 00 00 01 **08 00 F7 FF 00 00 00 00** ............ >>> ip.remove_payload() >>> hexdump(ip) 0000 45 00 00 14 00 01 00 00 FF 00 A7 DA 0A 00 00 0E E............... 0010 0A 00 00 01 .... >>> 
  • Python druckt nicht mit Import-Skulptur
  • Hinzufügen von Payload im Paket (Skripte)
  • Warum stört mein Stdout meine Webseite in Python?
  • Die Skripte verspotten keine Pakete, wenn sie mehrere Threads verwenden
  • Paketgebäude mit Scotion und Gevent
  • Extrahieren Sie empfangene Daten in einer tcp-Steckdose in Python
  • Ipsec.py CANT FINDEN Sie das Attribut IPPROTO_ESP und socket.IPPROTO_AH
  • Scapy.all import * funktioniert nicht
  • Scapy windows - sniff () - 'log_runtime' ist nicht definiert
  • Running Scapy auf Windows mit Python 2.7
  • Reverse dns Lookup mit Skulptur in Python
  • Python ist die beste Programmiersprache der Welt.