Kas iPhone on VPN-is? Mida iOS-i rakendus tegelikult näha saab
iOS-i SDK-s ei ole ühtset VPN-i lippu. Rakendus saab jälgida omaenda konfiguratsiooni, olekuteavitust ja piiratud proxy-hetktõmmist, mitte enamat.
Küsige iOS-i rakenduselt, kas telefon on VPN-is, ja aus vastus on, et see ei saa seda teada nii, nagu te mõtlete. SDK ei paku lippu «seade on tunnelis» ja privaatsed liidesed, mis võiksid sellele läheneda, on avaldatavate rakenduste jaoks suletud. Jälgida saab rakenduse enda konfiguratsiooni, sellega seotud olekut ja üht-teist kaudset vihjet võrgupinust. Igaüks vastab erinevale küsimusele ja enamik katkisi kontrolle tuleb sellest, et üht neist peetakse kogu vastuseks.
Üksiku VPN-i lipu müüt
Arvatakse, et kuskil SDK-s on omadus, mis teatab, kas seade on tunnelis, nii nagu kättesaadavuse lipp teatab, kas host vastab. Sellist avalikku omadust ei ole. Isegi kui oleks, on «tunnel on olemas» ja «minu liiklus kasutab seda» erinevad väited ning enamikule rakendustele loeb ainult teine.
Just see lünk on põhjus, miks teegid, mis reklaamivad üherealist VPN-i tuvastajat, loevad tavaliselt midagi habrast, näiteks liidese nime või proxy võtit, ja esitavad selle otsusena.
Laadi eelistused enne, kui usaldad nil-i
Jagatud halduri eksemplar on olemas niipea, kui seda küsida, kuid selle protokolli omadus jääb nil-iks, kuni laadimise callback lõpeb. Nii et nil-protokoll tähendab «veel laadimata» vähemalt sama sageli kui «pole paigaldatud». Tee lugemine lõpetamise ploki sees ja alles siis otsusta: olemasolev protokolliobjekt, mille lubamise lipp on sees, näeb välja nagu «paigaldatud».
Teine signaal on ühenduse objektil: kehtetu olek, millest süsteem teatab, kui sellel rakendusel pole ühtki konfiguratsiooni paigaldatud. Kehtetu olek koos nil-protokolliga pärast lõpetatud laadimist on tõeline puudumine, mitte ajastuse võidujooks.
Ühenduse muudatused tulevad teavitustena
Load-ile ja save-le antud töötlejad teatavad, mis konfiguratsiooniga juhtus, mitte mida tunnel teeb. Ühe neist ühendamisel ootamine on võidujooks, mis ei lõpe kunagi. Jälgi hoopis oleku muutumise teavitust ja loe ühenduse objekti praegune väärtus, kui see saabub.
Kui konfiguratsioon on paigaldatud, läbib ühenduse olek lühikese jada: katkestatud, ühendab, ühendatud, kinnitab uuesti, katkestab. «Ühendatud» kirjeldab tunnelit, mitte selle taga olevat serverit, seega pole see tõestus, et liiklus liigub. On-demand võib tunneli üles tõsta ka siis, kui rakendus on peatatud, ja siis saabub teavitus enne, kui sul on midagi värskendada.
Piiratud proxy-hetktõmmis on vihje, mitte otsus
CFNetwork saab anda rakendusele süsteemi praegused proxy-seaded, ja selle tulemuse sees on piiratud sõnastik, mille võti on liidese nimi. Nime nägemine, mis algab tähtedega tun, utun, ppp, ipsec või tap, on vihje, et tunnel on olemas. See jääb hetktõmmiseks sellest, mida see rakendus näha saab, mitte väiteks, kuhu paketid liiguvad.
Pakkujad ei ole nimetamises üksmeelel, seega puuduv eesliide ei tõesta midagi, ja olemasolev liides võib eksisteerida ilma liiklust kandmata. Kättesaadavus on veel nõrgem: edukas päring privaatsele aadressile näitab, et tee töötas selle päringu jaoks sel hetkel, mitte et VPN on paigaldatud.
Simulaator laenab Maci ja teised rakendused jäävad nähtamatuks
Simulaatoril pole oma võrgupinu; iga ühendus, mille see loob, on Maci oma. Host-Macis töötav VPN kehtib seega juba simuleeritud rakenduse jaoks ja simulaatori enda seaded ei näita midagi. Kui tunnel tõusis pärast simulaatori käivitamist, on selle taaskäivitamine tavaliselt kiirem kui rakenduse silumine. Host, mis on mittestandardsel pordil, vajab seda porti URL-is või kohalikku edasisaatmist nagu socat TCP-LISTEN:12345,fork TCP:host:12345.
Avalikud API-d ei loetle VPN-profiile, mis kuuluvad teistele rakendustele või konfiguratsiooniprofiilidele. Ühe tuntud rakenduse jaoks on portatiivne nipp URL-i skeemi proovimine canOpenURL kaudu ja alates iOS 9-st tuleb küsitud skeem deklareerida oma Info.plist-is; kui jätad selle välja, tagastab kutsung false. OpenVPN Connect vastab openvpn://-le, mis teeb sellest hea näite ja halva üldise tuvastaja.
Ühenda kolm vaatlust ja ütle, mida need tähendavad
Praktikas virna kolm tulemust: konfiguratsioon, mis laaditi ja on lubatud, ühenduse olek, mis pole kehtetu, ja päring aadressile, mis on kättesaadav ainult tunnelit pidi. Igaüks üksi eksitab; koos ütlevad need, mida rakendus teada saab, mitte mida kasutaja oletab.
Kirjuta tulemus diagnostikasse kolme reana, mitte ühe tõeväärtusena. Kui kasutaja ütleb, et VPN on väljas, aga sinu rakendus on vastu, näitavad kolm rida, milline vaatlus lahknes, ja see on vahe, kas toetuspiletiga saab midagi teha või see lõpeb sõnadega «minul töötab».