2012-08-03 14 views
5

स्कैपी में, मैं मैन्युअल रूप से मिलान पैकेट अपने संबंधित आईसीएमपी समय से अधिक संदेशों के साथ चाहता हूं।स्कैपी: मैं पूर्ण आईपी पैकेट हेडर कैसे प्राप्त करूं?

मैं मैच के लिए की जरूरत है:

  • आईपी-इन-ICMP ICMP पैकेट के क्षेत्र
  • IP हेडर और मेरे डाटा पैकेट के पहले 8 बाइट्स ICMP पैकेट एक समस्या नहीं है:

    icmpPayload = str (icmpPacket [ICMP] .payload)

डाटा पैकेट के पहले 8 बाइट्स का सवाल है, मैं जू सेंट क्या करने की जरूरत:

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

मैं कैसे केवलmyPacket का IP हेडर प्राप्त करने के लिए पता नहीं है। अब मैं अपने पहले 8 बाइट्स के साथ पूरे पैकेट में पेलोड को प्रतिस्थापित करता हूं। इस खोज और की जगह, अगर पैकेट के हजारों के लिए आवेदन किया, बहुत लंबा समय लग सकता है, मुझे डर लग रहा:

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

किसी भी तेज़ तरीका मुझे बस करने देंगे निम्नलिखित?

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

शायद सिर्फ: 'str (myPacket [आईपी]) [: 28]' –

उत्तर

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

IP हेडर लंबाई क्षेत्र ihl (इंटरनेट हैडर लंबाई) में है। इसे हेडर का उपयोग करने वाले 32 बिट शब्दों की संख्या के रूप में दर्शाया जाता है। (यह हेडर के 'विकल्प' खंड की वजह से परिवर्तनीय है)। इसलिए, यदि हम 32 से उस क्षेत्र को गुणा करते हैं और फिर 8 (या * 4) से विभाजित करते हैं तो हमें हेडर भरने वाले बाइट्स की संख्या मिलती है, चाहे विकल्पों में हों या नहीं।

मुझे आश्चर्य है कि निचली परतों के बिना बस आईपी हेडर को वापस करने के लिए कोई विधि नहीं है (जिसे मैं पा सकता हूं)।

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

3

मामले में किसी को इस सवाल में किसी और धक्कों में, मैं आपको remove_payload() वर्ग पैकेट (आईपी द्वारा विरासत में मिली) के समारोह उपयोग करने में सक्षम हो सकता है लगता है। यह सिर्फ हेडर छोड़ देना चाहिए। मैं स्कैपी के लिए नया हूं लेकिन ऐसा लगता है कि जब मैं इसे दुभाषिया पर कोशिश करता हूं तो यह काम करता है।

>>> 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

धन्यवाद! मुझे इस समारोह के बारे में पता नहीं था। –

+1

क्या हेडर को हटाने का कोई तरीका है? i.e: ईथरनेट, आईपीवी 4 या टीसीपी – SuB

संबंधित मुद्दे