मैं एक बहुत ही सरल शुद्ध फिल्टर लिख रहा हूं, और जहां मैं IPv6 हेडर को ICMPv6 प्रकार, टीसीपी / यूडीपी पोर्ट नंबर, आदि जैसी चीजों से मिलान करना चाहता हूं, वहां पहुंच रहा हूं।
इसलिए मैं गहराई में IPv6 पैकेट प्रारूप के बारे में पढ़ रहा हूं , और मैं इस तरह का हूं ... अच्छी तरह से ... मुझे यह सुनिश्चित करने के लिए बार-बार पढ़ना पड़ा कि मैं वास्तव में इसे सही पढ़ रहा हूं। यह मुझे दिखता है कि आपको 40-बाइट तय हेडर से शुरू करना है और इसके अगले हेडर फ़ील्ड को देखना है। फिर आपको अगले हेडर के अगले हेडर फ़ील्ड को देखना होगा, और इसी तरह, एक लिंक्ड सूची की तरह, जब तक आप अंत तक नहीं पहुंचते। यदि पेलोड है, तो यह अनुसरण करेगा।
समस्या यह है कि निश्चित हेडर या एक्सटेंशन हेडर में लंबाई क्षेत्र नहीं है। आपके पास एक्सटेंशन हेडर प्रकारों और उनके आकारों की एक तालिका होनी चाहिए ताकि आप इस लिंक की गई सूची का अंत तक पीछा कर सकें।
यह मुझे एक अजीब, संभवतः हरे-दिमाग वाले डिजाइन के रूप में हमला करता है। क्या होगा अगर मैं एक गैर-मान्यता प्राप्त एक्सटेंशन हेडर प्रकार का सामना करूं? मैं क्या करूं? मैं इसकी लंबाई नहीं जानता। मुझे लगता है कि मुझे पैकेट को बाहर फेंकना होगा और इसे ब्लॉक करना होगा, क्योंकि एक नेट फ़िल्टर के माध्यम से पैकेट के माध्यम से एक हमलावर को फर्जी हेडर टाइप करके नेट फिल्टर को बाहर निकालने की अनुमति होगी। लेकिन इसका मतलब यह है कि यदि प्रोटोकॉल कभी बढ़ाया गया है, तो IPv6 हेडर पार्सिंग सॉफ़्टवेयर के हर एक टुकड़े को कभी भी एक साथ अपडेट किया जाना चाहिए, अगर नया एक्सटेंशन उपयोग किया जाना है।
तो अगर मैं उन एक्सटेंशनों का पता नहीं लगाता, जिन्हें वे उपयोग कर रहे हैं, तो मैं आईपीवी 6 हेडर्स को पार्स कैसे कर सकता हूं? मैं किसी अज्ञात एक्सटेंशन के लिए हेडर कैसे छोड़ सकता हूं, क्योंकि मुझे इसकी लंबाई नहीं पता है?