फोन VPN मा छ कि भनेर iOS एपलाई सोध्नुहोस्, र इमानदार उत्तर यही हो कि तपाईंले भन्न खोजेको अर्थमा यसले जान्न सक्दैन। SDK ले «यन्त्र सुरुङमा छ» भन्ने कुनै झन्डा दिँदैन, र यसको नजिक पुग्न सक्ने निजी इन्टरफेसहरू प्रकाशित हुने एपहरूका लागि बन्द छन्। तपाईं आफ्नो एपको आफ्नै कन्फिगरेसन, त्यसमा जोडिएको अवस्था, र नेटवर्क स्ट्याकबाट एक-दुई अप्रत्यक्ष संकेत अवलोकन गर्न सक्नुहुन्छ। प्रत्येकले फरक प्रश्नको उत्तर दिन्छ, र अधिकांश बिग्रिएका जाँचहरू तीमध्ये एउटालाई पूरै उत्तर ठान्नबाट आउँछन्।

एउटै VPN झन्डाको मिथक

SDK भित्र कतै यन्त्र सुरुङमा छ कि छैन भन्ने गुण छ भन्ने विश्वास छ, जसरी पहुँचयोग्यता झन्डाले होस्टले जवाफ दिन्छ कि दिँदैन भन्छ। त्यस्तो सार्वजनिक गुण छैन। भए पनि, «सुरुङ छ» र «मेरो ट्राफिकले यसलाई प्रयोग गर्छ» फरक दाबी हुन्, र अधिकांश एपका लागि दोस्रो मात्र महत्त्वपूर्ण छ।

यही खाडलका कारण एक-लाइन VPN डिटेक्टरको विज्ञापन गर्ने लाइब्रेरीहरू प्रायः इन्टरफेसको नाम वा प्रोक्सी कुञ्जीजस्तो नाजुक कुरा पढ्छन् र त्यसलाई फैसला ठानेर प्रस्तुत गर्छन्।

nil मा भरोसा गर्नुअघि प्राथमिकताहरू लोड गर्नुहोस्

साझा म्यानेजर इन्स्ट्यान्स तपाईंले मागेको क्षणमै हुन्छ, तर यसको प्रोटोकल गुण लोड कलब्याक पूरा नभएसम्म nil रहन्छ। त्यसैले nil प्रोटोकलको अर्थ «अझै लोड भएको छैन» कम्तीमा «इन्स्टल छैन» जत्तिकै पटक हुन्छ। पढाइ कम्प्लिसन ब्लकभित्र गर्नुहोस्, र त्यसपछि मात्र निर्णय गर्नुहोस्: अस्तित्वमा रहेको प्रोटोकल वस्तु, इनेबल झन्डा खुला रहेको, त्यही «इन्स्टल» देखिने रूप हो।

दोस्रो संकेत कनेक्सन वस्तुमा छ: अवैध स्थिति, जुन यो एपसँग कुनै इन्स्टल गरिएको कन्फिगरेसन नभएको बेला सिस्टमले जनाउँछ। पूरा लोडपछि अवैध स्थिति र nil प्रोटोकल सँगै साँचो अनुपस्थिति हुन्, समयको दौड होइन।

कनेक्सन परिवर्तन सूचनाका रूपमा आउँछन्

load र save लाई दिइएका ह्यान्डलरहरूले कन्फिगरेसनलाई के भयो भन्ने जनाउँछन्, सुरुङले के गर्दै छ भन्ने होइन। कनेक्ट हुँदा तीमध्ये एउटा सक्रिय हुने पर्खाइ कहिल्यै नटुंगिने दौड हो। यसको सट्टा स्थिति परिवर्तनको सूचना हेर्नुहोस्, र आएपछि कनेक्सन वस्तुको हालको मान पढ्नुहोस्।

कन्फिगरेसन इन्स्टल भएपछि कनेक्सन स्थिति छोटो क्रमबाट जान्छ: डिस्कनेक्टेड, कनेक्ट हुँदै, कनेक्टेड, पुनः पुष्टि गर्दै, डिस्कनेक्ट हुँदै। «कनेक्टेड» ले सुरुङको वर्णन गर्छ, त्यसपछाडिको सर्भरको होइन, त्यसैले यो ट्राफिक बगिरहेको प्रमाण होइन। On-demand ले एप सस्पेन्ड हुँदा पनि सुरुङ उठाउन सक्छ, र त्यति बेला अद्यावधिक गर्ने कुरा हुनुअघि नै सूचना आइपुग्छ।

सीमित प्रोक्सी स्न्यापसट संकेत हो, फैसला होइन

CFNetwork ले एपलाई सिस्टमको हालको प्रोक्सी सेटिङ दिन सक्छ, र त्यो नतिजाभित्र इन्टरफेसको नामले कुञ्जी भएको सीमित शब्दकोश हुन्छ। tun, utun, ppp, ipsec वा tap बाट सुरु हुने नाम देख्नु सुरुङ रहेको संकेत हो। यो यो एपले देख्न सक्ने कुराको स्न्यापसट रहन्छ, प्याकेट कहाँ जान्छन् भन्ने कथन होइन।

प्रदायकहरू नामकरणमा सहमत छैनन्, त्यसैले उपसर्ग नहुनु केही पनि प्रमाणित गर्दैन, र भएको इन्टरफेस ट्राफिक नबोकीकन पनि हुन सक्छ। पहुँचयोग्यता अझ कमजोर छ: निजी ठेगानामा सफल अनुरोधले त्यो क्षणमा त्यो अनुरोधका लागि बाटो चलेको देखाउँछ, VPN इन्स्टल छ भनेर होइन।

सिमुलेटरले Mac उधारो लिन्छ, र अरू एप अदृश्य रहन्छन्

सिमुलेटरसँग आफ्नै नेटवर्क स्ट्याक छैन; यसले गर्ने हरेक कनेक्सन Mac को हो। त्यसैले होस्ट Mac मा चलिरहेको VPN सिमुलेट गरिएको एपका लागि पहिले नै लागू छ, र सिमुलेटरका आफ्नै सेटिङले केही देखाउँदैनन्। सिमुलेटर सुरु भएपछि सुरुङ उठेको हो भने एप डिबग गर्नुभन्दा यसलाई फेरि सुरु गर्नु सामान्यतया छिटो हुन्छ। गैर-मानक पोर्टमा रहेको होस्टलाई त्यो पोर्ट URL मा चाहिन्छ, वा socat TCP-LISTEN:12345,fork TCP:host:12345 जस्तो स्थानीय फर्वार्डिङ चाहिन्छ।

सार्वजनिक API ले अरू एप वा कन्फिगरेसन प्रोफाइलका VPN प्रोफाइल सूचीबद्ध गर्दैनन्। एउटा ज्ञात एपका लागि canOpenURL मार्फत URL स्किम जाँच नै लैजान सकिने उपाय हो, र iOS 9 देखि सोधिएको स्किम तपाईंको Info.plist मा घोषणा गर्नुपर्छ; छोडिदिए कलले false फर्काउँछ। OpenVPN Connect ले openvpn:// मा प्रतिक्रिया दिन्छ, जसले यसलाई राम्रो उदाहरण र कमजोर सामान्य डिटेक्टर बनाउँछ।

तीन अवलोकन जोड्नुहोस् र तिनको अर्थ भन्नुहोस्

व्यवहारमा तीन नतिजा थुपार्नुहोस्: लोड भई सक्रिय भएको कन्फिगरेसन, अवैध नभएको कनेक्सन स्थिति, र सुरुङबाट मात्र पुगिने ठेगानामा अनुरोध। प्रत्येक एक्लै भ्रमित गर्छ; सँगै तिनले एपले के जान्न सक्छ भन्ने बताउँछन्, प्रयोगकर्ताले के अनुमान गर्छ भन्ने होइन।

नतिजा आफ्नो डायग्नोस्टिक्समा एउटा boolean होइन, तीन लाइनका रूपमा लेख्नुहोस्। प्रयोगकर्ताले VPN बन्द छ भन्दा र तपाईंको एप सहमत नहुँदा, ती तीन लाइनले कुन अवलोकन फरक परेको देखाउँछन्, र यही फरक हो तपाईंले कारबाही गर्न सक्ने सपोर्ट टिकट र «मेरोमा चल्छ» भनेर टुंगिने टिकटबीच।

सम्बन्धित लेखहरू