2016-03-28 12 views
5

मैं एफ 5 नेटवर्क बिग-आईपी उत्पादों का उपयोग कर रहा हूं, जो डिबगिंग उद्देश्यों के लिए एक कस्टम ईथरनेट II ट्रेलर फ्रेम जोड़ रहे हैं। मैं इस ट्रेलर के लिए एक नई परत बांधने के लिए स्कापी के साथ प्रयास कर रहा हूं, लेकिन मैं ऐसा करने में असमर्थ हूं।स्कैपी - एक ईथरनेट ट्रेलर फ़ील्ड को विच्छेदन कैसे करें

मैं पैडिंग क्षेत्र में रुचि का पेलोड देख सकता हूं लेकिन बाइंड_लेयर का उपयोग करके आवश्यक पैडिंग अनुभाग का उचित विच्छेदन नहीं करता है।

class MyEthTrailer(Packet): 
    name = "Ethernet Trailer" 
    fields_desc = [ ####Fields Mapping Section ] 
    def dissect(self, s): 
     self.payl,self.pad = self.extract_padding(s) 
     s = self.do_dissect(self.pad) 

एक समाधान मैं सोच रहा था एक नया ईथरनेट प्रतिस्थापन वर्ग का निर्माण करना था (या अतिभारित) है, जो मैं कर सकते हैं तो ठेठ ईथरनेट पेलोड और अपने नए ट्रेलर को दर्शाता है। लेकिन मैं एक सुपर पायथन/स्कैपी प्रोग्रामर नहीं हूं, और मुझे यकीन नहीं है कि यह सबसे अच्छा विकल्प है या नहीं।

इस प्रकार स्कैपी वर्तमान में मेरे पैकेट को मानचित्र करता है जब मैं bind_layers (TCP, MyEthTrailer) लागू करता हूं।

packet[TCP].decode_payload_as(MyEthTrailer) 

हालांकि, bind_layers विधि: जानकारी मैं पार्स होना चाहिए पैडिंग वर्ग

<Ether dst=00:00:00:00:00:00 src=00:00:00:00:00:01 type=0x8100 |<Dot1Q prio=0L id=0L vlan=01L type=0x800 |<IP version=4L ihl=5L tos=0x0 len=67 id=1 flags=DF frag=0L ttl=255 proto=tcp chksum=0x01 src=10.0.0.1 dst=10.0.1.1 options=[] |<TCP sport=1111 dport=https seq=1 ack=1 dataofs=5L reserved=0L flags=PA window=4380 chksum=0xb718 urgptr=0 options=[] |<MyEthTrailer |<Padding load='\xPayload of MyEtherTrailer' |>>>>>> 

[अद्यतन-1]

मैं फोन करके एक टीसीपी SYN पैकेट डिकोडिंग मजबूर कर सकते हैं में है , स्वचालित रूप से काम नहीं कर रहा है, और यह अधिक जटिल पैकेट के साथ काम नहीं करता है क्योंकि यह MyEthTrailer पेलोड के साथ टीसीपी पैडिंग को मिला रहा है।

[अद्यतन-2]

मैं इसे आंशिक रूप से काम कर रहा है, लेकिन हर पैकेट ठीक से casted किए जाने की जरूरत है, तो मैं ट्रेलर पेलोड पढ़ सकते हैं और यह डिकोड कर सकते हैं मिल गया। उदाहरण के लिए यदि कोई पैकेट टीसीपी/DNS/MyEthTrailer है, तो यह काम करेगा। अगर मुझे यह DNS नहीं पता है, और यह ठीक तरह से स्थापित नहीं है, तो यह अभी भी टीसीपी पेलोड और पैडिंग में मिश्रित है।

आपकी सहायता की सराहना की जाती है।

+0

एफ 5 प्लगइन स्रोत यहां है: https://devcentral.f5.com/wiki/AdvDesignConfig.F5WiresharkPlugin.ashx। उम्मीद है कि यह आपको अलग करने में मदद करेगा। –

उत्तर

0

मैं अपने नए कस्टम क्लास MyEthTrailer के pre_dissect फ़ंक्शन को ओवरलोड करके ऐसा करने में सक्षम था। मैं अंतिम परत के पेलोड को पार्स करने का प्रयास करता हूं जिसमें पैडिंग है, और सत्यापित करें कि इसकी सही लंबाई है या नहीं।

2 बातों के साथ संभाल है:

भाग 1 काटना अनुभाग
class MyEthTrailer(Packet): 
    def pre_dissect(self,s): 
     verify_if_payload_is_mine_and_assign_fields() 
भाग 2 मैनुअल फोर्स पेलोड डिकोड
_debug=True 

if re.match(r'F5\-Pseudo-\pkt.+tcpdump',str(packets[0][Raw])): 
     if re.match(r'.+CMD\:.+\-s0.+VER\:.+',str(packets[0][Raw])): has_F5_trailer=True 
     if re.match(r'.+CMD\:.+\:nnn.+VER\:.+',str(packets[0][Raw])): F5_trailer_noise_level=3 
     elif re.match(r'.+CMD\:.+\:nn.+VER\:.+',str(packets[0][Raw])): F5_trailer_noise_level=2 
     elif re.match(r'.+CMD\:.+\:n.+VER\:.+',str(packets[0][Raw])): F5_trailer_noise_level=1 
     else: 
      if _debug: print "No F5 EthTrailer F5_Noise_level visible from packets[0]" 
    if has_F5_trailer: 
     #Skip the F5 first packet, which only contains the info. 
     for pk in packets[1:]: 
      try: 
       if isinstance(pk.lastlayer(),Padding): 
        pk.lastlayer().underlayer.decode_payload_as(MyEthTrailer) 
      except: 
       #Errorhandling 

मैं Github करने के लिए पूरे समाधान पोस्ट और यहाँ अद्यतन करता है, तो किसी को दिलचस्पी है जाएगा ।

+0

मुझे गिटहब लिंक देखने में दिलचस्पी होगी - क्योंकि मुझे एक कस्टम परत को डीकोड करने के लिए मजबूर करने में कोई समस्या है। मैं बस आपको पैकेट [टीसीपी] .decode_payload_as (MyEthTrailer) कार्यान्वयन की कोशिश कर रहा हूं। –

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