2012-08-28 31 views
7

मैं किसी भी वास्तविक वीपीएन सर्वर के बिना उचित हार्डवेयर पर वीपीएन से वीपीएन के माध्यम से पैकेट भेजने की कोशिश कर रहा हूं, इसलिए मैं पैकेट को भेजकर लॉग इन कर सकता हूं।एंड्रॉइड में नेटवर्क इंटरफेस में कच्चे पैकेट भेजना काम नहीं करता है?

मैं wlan0 इंटरफ़ेस के लिए InetAddress प्राप्त करने में सक्षम हूं, मैं वास्तव में पैकेट को जाना चाहता हूं, लेकिन मुझे यकीन नहीं है कि यह सही जगह है (यह मेरा वर्तमान आईपी पता दिखाता है)। यह करने के लिए

socket.connect(new InetSocketAddress(uplink, 0)); 

और लिखने पैकेट:

मैं तो एक DatagramChannel (socket कहा जाता है और IntetAddressuplink है) उस पर का उपयोग

socket.write(packet); 

लेकिन कुछ भी नहीं चिपक जाता है, मैं सिर्फ

मिल
java.net.SocketException: sendto failed: EINVAL (Invalid argument) 
+0

क्या आप इस मुद्दे को हल करने में सक्षम थे? यदि आप सक्षम थे तो कृपया दृष्टिकोण/कोड प्रदान करें। – thedarkpassenger

उत्तर

0

आप एक उच्च बंदरगाह का प्रयास कर सकते हैं। यह मेरे लिए काम करता है: InetSocketAddress(uplink, 3022)

मुझे नहीं पता कि बंदरगाह उपयोग में नहीं है या नहीं।

आपको wlan0 का पता कैसे मिला? मैंने adb shell ifconfig का उपयोग किया और पता चिपकाया।

1

प्रोग्रामिंग के लिए wlan0 पता प्राप्त करने के लिए आप NetworkInterface APIs का उपयोग कर सकते हैं।

मैं भी इसी तरह की बात है .. मैं आभासी इंटरफेस पर पैकेट देखने के लिए सक्षम हूँ करने के लिए कोशिश कर रहा हूँ .. लेकिन मैं स्थानीय इंटरफेस के माध्यम से पैकेट भेजने में सक्षम नहीं कर रहा हूँ ..

मैं कर सकती हूं डेटाग्राम चैनल के साथ wlan0 से कनेक्ट करें, लेकिन wlan0 से बाहरी सर्वर से कनेक्शन SYN_SEND पर अटक गया है ..

12

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

आपकी/मेरी स्थिति के साथ समस्या यह है कि आप VpnService द्वारा दिए गए वर्चुअल नेटवर्क इंटरफेस से पैकेट ले रहे हैं, लेकिन फिर आप उन पैकेट ले रहे हैं और उन्हें सॉकेट के साथ लिख रहे हैं। एक सॉकेट का उद्देश्य क्लाइंट और सर्वर के बीच एप्लिकेशन पेलोड के हस्तांतरण को संभालने के लिए है, पैकेट नहीं।

सॉकेट आपके द्वारा बनाए गए किसी भी डेटा को ले जाएगा, और उस डेटा को अपने स्वयं के सृजन के एक पैकेट के भीतर लपेटें (यदि आप डेटाग्राम सॉकेट का उपयोग कर रहे हैं तो सॉकेट, यूडीपी का उपयोग करते हुए टीसीपी)। आपके मामले में, जो डेटा आप सॉकेट सौंप रहे हैं वह स्वयं एक पैकेट है, और इस प्रकार आप एक पैकेट के भीतर एक पैकेट के साथ समाप्त होते हैं (संभवतः एक यूडीपी पैकेट के अंदर एक टीसीपी पैकेट)।

जब लपेटा हुआ पैकेट आपके सॉकेट के लिए सर्वर पर आता है, तो उस अंत में नेटवर्क इंटरफ़ेस और सर्वर सॉकेट पेलोड को खोल देगा और यह पता लगाएगा कि यह एक और पैकेट है। संभवतः काम नहीं करने जा रहा है क्योंकि सर्वर-साइड सॉकेट (उदा। वेब सर्वर) से जो कुछ भी पढ़ रहा है वह एप्लिकेशन पेलोड (जैसे HTTP शीर्षलेख/आदि) की अपेक्षा कर रहा है।

अब, जब आपके पास वास्तविक वीपीएन सुरंग है, तो उस सुरंग का सर्वर-पक्ष शायद आपके 'लपेटे हुए पैकेट' पेलोड को यूडीपी पैकेट से बाहर खींच रहा है और फिर उस पैकेट को सीधे नेटवर्क इंटरफेस पर सौंप रहा है खुद पैकेट की व्याख्या करें।

इस वास्तविक वीपीएन सुरंग के बिना, आपके वीपीएन सेवा प्रदाता को अनिवार्य रूप से एक वर्चुअल नेटवर्क इंटरफेस बनना होगा, टीसीपी/यूडीपी/आदि को संभालना होगा। वर्चुअल नेटवर्क इंटरफ़ेस और आपके कोड के बीच प्रोटोकॉल। असल में, आपके वीपीएन इंटरफ़ेस से पढ़ने वाले पैकेट को आपके आउटगोइंग सॉकेट पर लिखने से पहले एक एप्लिकेशन डेटा स्ट्रीम (पैकेट को एकत्रित और पुनः संयोजित) के रूप में माना जाना चाहिए। फिर, आपको किसी भी तरह से इंटरफ़ेस से खाए गए पैकेट को स्वीकार करना होगा। फिर, आपको अपने सॉकेट से आने वाले डेटा लेना होगा (जो एक पेलोड डेटा स्ट्रीम है), और इसे पैकेट में तोड़ना है जिसे आप अपने वीपीएन इंटरफ़ेस की आउटपुट स्ट्रीम पर वापस भेज सकते हैं। अंत में, आपको पावती यातायात को संभालने की आवश्यकता है, आपके वर्चुअल वीपीएन इंटरफ़ेस आपके द्वारा भेजे जाने वाले पैकेट के जवाब में भेजेगा। यह करने के लिए तुच्छ नहीं है।

मुझे उम्मीद है कि मैं इस सब के बारे में गलत हूं, और किसी के पास जावा में लिखा गया एक सरल 'आभासी नेटवर्क इंटरफ़ेस' है जिसका उपयोग वास्तविक वीपीएन सुरंग की जगह लेने के लिए किया जा सकता है। मैं इसे खोजने में सक्षम नहीं हूं।

+1

क्या आपने कभी इस पर अधिक प्रगति की है, @ मिच? क्या पैकेट को अग्रेषित करने का एक आसान तरीका साबित हुआ था या क्या आपने सीधे सभी पैकेट हैंडलिंग को लागू करने के लिए अंत किया था? – OldPeculier

+0

मुझे वर्तमान में एक समान समस्या का सामना करना पड़ रहा है। क्या आप अंततः इस मुद्दे को हल करने में सक्षम थे? – thedarkpassenger

+0

आप जो कह रहे हैं वह पूरी तरह से समझ में आता है। लेकिन जब हम वीपीएन इंटरफ़ेस में पैकेट प्राप्त करते हैं, तो क्या उस पैकेट से एप्लिकेशन पेलोड निकालने का कोई तरीका नहीं है और फिर इच्छित गंतव्य पर उस एप्लिकेशन पेलोड को पास कर दिया गया है? – thedarkpassenger

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

  • कोई संबंधित समस्या नहीं^_^