iPhone VPN वर आहे का? iOS ॲप खरंच काय पाहू शकतं
iOS SDK मध्ये एकच VPN फ्लॅग नाही. ॲप फक्त स्वतःची कॉन्फिगरेशन, स्थिती सूचना आणि मर्यादित प्रॉक्सी स्नॅपशॉट पाहू शकतं, त्यापेक्षा जास्त नाही.
फोन 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 बंद आहे आणि तुमचं ॲप सहमत नाही, तेव्हा त्या तीन ओळी कोणतं निरीक्षण वेगळं पडलं ते दाखवतात, आणि हाच फरक आहे ज्यावर तुम्ही कार्यवाही करू शकता अशा सपोर्ट तिकिटात आणि «माझ्याकडे चालतं» असं संपणाऱ्या तिकिटात.