2012-08-03 17 views
5

Scapy'de, paketleri karşılık gelen ICMP zaman aşımına uğramış iletileriyle eşleştirmelerini istiyorum.Scapy: Tam IP paket başlığını nasıl alabilirim?

ben eşleşmesi gerekir:

    ICMP paketi bir sorun değildir IP içinde ICMP
  • IP bağlantısı ve benim veri paketinin ilk 8 bayt ICMP paketinin alanında

  • :

    icmpPayload = str (icmpPacket [ICMP] .payload) veri paketinin ilk 8 bayt gelince

, I ju st yapmanız gerekir:

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

Ben myPacket ait sadece IP başlığını almak için nasıl bilmiyorum. Şimdi tek yaptığım, bütün paketin içindeki yükü ilk 8 bayt ile değiştirmektir. paketlerinin binlerce uygulanan bu arama ve değiştirme, çok uzun sürebilir, korkarım:

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

bana sadece aşağıdakileri yapın sağlayacak Daha hızlı yolu?

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

Muhtemelen: 'str (myPacket [IP]) [: 28]' –

cevap

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

IP başlık uzunluğu alanı ihl (Başlık Uzunluğu) yer alır. Başlığın kullandığı 32bit kelimelerin sayısıyla temsil edilir. (başlığın 'seçenekler' bölümü nedeniyle değişkendir). Yani, bu alanı 32 ile çarpıp sonra 8'e (veya * 4'e) bölersek, ister başlık ister doldurur, ister seçenekler olsun ya da olmasın.

IP üstbilgisini alt katman olmadan SADECE döndürmek için bir yöntem (bulamadığım) bulunmadığına şaşıyorum. Bu sorunun içine vaka başkasının darbelere olarak

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

3

, sana remove_payload() (IP miras) sınıfı Packet fonksiyonunu kullanmak mümkün olabilir düşünüyorum. Bu sadece başlığı bırakmalıdır. Ben scapy için yeni ama yorumlayıcıda denediğimde çalışır gibi görünüyor.

>>> 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          .... 
>>> 
+0

teşekkür ederiz! Bu işlevi bilmiyordum. –

+1

Başlıkları kaldırmak için herhangi bir yolu var mı? yani: Ethernet, IPv4 veya TCP – SuB

İlgili konular