मैं एंड्रॉइड के लिए फ़ायरवॉल/फ़िल्टरिंग एप्लिकेशन बनाने में कुछ ऐसा करने की कोशिश कर रहा हूं। मैं इसके बीच में हूं, इसलिए नमक के उचित आकार के अनाज के साथ मैं जो कहता हूं उसे ले लो। :-)
आपकी/मेरी स्थिति के साथ समस्या यह है कि आप VpnService द्वारा दिए गए वर्चुअल नेटवर्क इंटरफेस से पैकेट ले रहे हैं, लेकिन फिर आप उन पैकेट ले रहे हैं और उन्हें सॉकेट के साथ लिख रहे हैं। एक सॉकेट का उद्देश्य क्लाइंट और सर्वर के बीच एप्लिकेशन पेलोड के हस्तांतरण को संभालने के लिए है, पैकेट नहीं।
सॉकेट आपके द्वारा बनाए गए किसी भी डेटा को ले जाएगा, और उस डेटा को अपने स्वयं के सृजन के एक पैकेट के भीतर लपेटें (यदि आप डेटाग्राम सॉकेट का उपयोग कर रहे हैं तो सॉकेट, यूडीपी का उपयोग करते हुए टीसीपी)। आपके मामले में, जो डेटा आप सॉकेट सौंप रहे हैं वह स्वयं एक पैकेट है, और इस प्रकार आप एक पैकेट के भीतर एक पैकेट के साथ समाप्त होते हैं (संभवतः एक यूडीपी पैकेट के अंदर एक टीसीपी पैकेट)।
जब लपेटा हुआ पैकेट आपके सॉकेट के लिए सर्वर पर आता है, तो उस अंत में नेटवर्क इंटरफ़ेस और सर्वर सॉकेट पेलोड को खोल देगा और यह पता लगाएगा कि यह एक और पैकेट है। संभवतः काम नहीं करने जा रहा है क्योंकि सर्वर-साइड सॉकेट (उदा। वेब सर्वर) से जो कुछ भी पढ़ रहा है वह एप्लिकेशन पेलोड (जैसे HTTP शीर्षलेख/आदि) की अपेक्षा कर रहा है।
अब, जब आपके पास वास्तविक वीपीएन सुरंग है, तो उस सुरंग का सर्वर-पक्ष शायद आपके 'लपेटे हुए पैकेट' पेलोड को यूडीपी पैकेट से बाहर खींच रहा है और फिर उस पैकेट को सीधे नेटवर्क इंटरफेस पर सौंप रहा है खुद पैकेट की व्याख्या करें।
इस वास्तविक वीपीएन सुरंग के बिना, आपके वीपीएन सेवा प्रदाता को अनिवार्य रूप से एक वर्चुअल नेटवर्क इंटरफेस बनना होगा, टीसीपी/यूडीपी/आदि को संभालना होगा। वर्चुअल नेटवर्क इंटरफ़ेस और आपके कोड के बीच प्रोटोकॉल। असल में, आपके वीपीएन इंटरफ़ेस से पढ़ने वाले पैकेट को आपके आउटगोइंग सॉकेट पर लिखने से पहले एक एप्लिकेशन डेटा स्ट्रीम (पैकेट को एकत्रित और पुनः संयोजित) के रूप में माना जाना चाहिए। फिर, आपको किसी भी तरह से इंटरफ़ेस से खाए गए पैकेट को स्वीकार करना होगा। फिर, आपको अपने सॉकेट से आने वाले डेटा लेना होगा (जो एक पेलोड डेटा स्ट्रीम है), और इसे पैकेट में तोड़ना है जिसे आप अपने वीपीएन इंटरफ़ेस की आउटपुट स्ट्रीम पर वापस भेज सकते हैं। अंत में, आपको पावती यातायात को संभालने की आवश्यकता है, आपके वर्चुअल वीपीएन इंटरफ़ेस आपके द्वारा भेजे जाने वाले पैकेट के जवाब में भेजेगा। यह करने के लिए तुच्छ नहीं है।
मुझे उम्मीद है कि मैं इस सब के बारे में गलत हूं, और किसी के पास जावा में लिखा गया एक सरल 'आभासी नेटवर्क इंटरफ़ेस' है जिसका उपयोग वास्तविक वीपीएन सुरंग की जगह लेने के लिए किया जा सकता है। मैं इसे खोजने में सक्षम नहीं हूं।
क्या आप इस मुद्दे को हल करने में सक्षम थे? यदि आप सक्षम थे तो कृपया दृष्टिकोण/कोड प्रदान करें। – thedarkpassenger