Je iPhone na VPN? Čo môže aplikácia pre iOS skutočne vidieť
V iOS SDK neexistuje jediný príznak VPN. Aplikácia môže pozorovať len vlastnú konfiguráciu, oznámenie o stave a obmedzený snímok proxy, nič viac.
Opýtajte sa aplikácie pre iOS, či je telefón na VPN, a úprimná odpoveď je, že to nemôže vedieť tak, ako to myslíte. SDK neponúka žiadny príznak pre «zariadenie je v tuneli» a súkromné rozhrania, ktoré by sa k tomu mohli priblížiť, sú pre publikované aplikácie uzavreté. Môžete pozorovať vlastnú konfiguráciu aplikácie, stav, ktorý je k nej pripojený, a jeden či dva nepriame náznaky zo sieťového zásobníka. Každý odpovedá na inú otázku a väčšina pokazených kontrol vzniká tým, že sa jeden z nich vezme za celú odpoveď.
Mýtus jediného príznaku VPN
Verí sa, že niekde v SDK existuje vlastnosť, ktorá hlási, či je zariadenie v tuneli, podobne ako príznak dostupnosti hlási, či hostiteľ odpovedá. Taká verejná vlastnosť neexistuje. A aj keby existovala, «tunel existuje» a «môj provoz ho používa» sú rôzne tvrdenia a pre väčšinu aplikácií je dôležité len to druhé.
Práve kvôli tejto medzere knižnice, ktoré inzerujú jednoriadkový detektor VPN, zvyčajne čítajú niečo krehké, napríklad názov rozhrania alebo kľúč proxy, a vydávajú to za rozsudok.
Načítajte predvoľby, skôr než uveríte nil
Zdieľaná inštancia správcu existuje, hneď ako o ňu požiadate, ale jej vlastnosť protokolu zostáva nil, kým sa nedokončí zavolanie načítania. Preto nil protokol znamená «ešte nenačítané» prinajmenšom rovnako často ako «nenainštalované». Čítajte vo vnútri bloku dokončenia a až potom rozhodnite: objekt protokolu, ktorý existuje a má zapnutý príznak povolenia, tak vyzerá «nainštalované».
Druhý signál je na objekte pripojenia: neplatný stav, ktorý systém hlási, keď táto aplikácia nemá nainštalovanú žiadnu konfiguráciu. Neplatný stav spolu s nil protokolom po dokončenom načítaní je skutočná neprítomnosť, nie časový pretek.
Zmeny pripojenia prichádzajú ako oznámenia
Obslužné rutiny odovzdané do load a save hlásia, čo sa stalo s konfiguráciou, nie čo robí tunel. Čakať, kým sa jedna z nich spustí pri pripájaní, je pretek, ktorý sa nikdy nevyrieši. Sledujte namiesto toho oznámenie o zmene stavu a prečítajte aktuálnu hodnotu objektu pripojenia, keď dorazí.
Keď je konfigurácia nainštalovaná, stav pripojenia prejde krátkou sekvenciou: odpojené, pripája sa, pripojené, znovu potvrdzuje, odpája sa. «Pripojené» opisuje tunel, nie server za ním, takže to nie je dôkaz, že provoz tečie. On-demand môže tunel zdvihnúť aj vtedy, keď je aplikácia pozastavená, a vtedy oznámenie dorazí skôr, než máte čo aktualizovať.
Obmedzený snímok proxy je náznak, nie rozsudok
CFNetwork môže aplikácii odovzdať aktuálne systémové nastavenia proxy a vnútri toho výsledku je obmedzený slovník s kľúčom podľa názvu rozhrania. Názov začínajúci na tun, utun, ppp, ipsec alebo tap je náznak, že tunel existuje. Zostáva snímkom toho, čo táto aplikácia vidí, nie tvrdením o tom, kadiaľ pakety putujú.
Poskytovatelia sa nezhodnú na pomenovaní, takže chýbajúci prefix nič nedokazuje a prítomné rozhranie môže existovať bez prenosu provozu. Dostupnosť je ešte slabšia: úspešná požiadavka na súkromnú adresu ukazuje, že cesta pre tú požiadavku v tej chvíli fungovala, nie že je nainštalovaná VPN.
Simulátor si požičiava Mac a ostatné aplikácie zostávajú neviditeľné
Simulátor nemá vlastný sieťový zásobník; každé spojenie, ktoré nadviaže, je Macu. VPN bežiaca na hostiteľskom Macu teda už platí aj pre simulovanú aplikáciu a nastavenia samotného simulátora nič neukazujú. Ak tunel vznikol po spustení simulátora, reštartovať ho je zvyčajne rýchlejšie než ladiť aplikáciu. Hostiteľ na neštandardnom porte potrebuje ten port v URL, alebo miestne presmerovanie ako socat TCP-LISTEN:12345,fork TCP:host:12345.
Verejné API nevyjmenujú profily VPN, ktoré patria iným aplikáciám alebo konfiguračným profilom. Pre jednu známu aplikáciu je prenosný trik sonda schémy URL cez canOpenURL a od iOS 9 musí byť dopytovaná schéma deklarovaná vo vašom Info.plist; ak ju vynecháte, volanie vráti false. OpenVPN Connect odpovedá na openvpn://, čo z neho robí dobrý príklad a zlý všeobecný detektor.
Spojte tri pozorovania a povedzte, čo znamenajú
V praxi naskladajte tri výsledky: konfiguráciu, ktorá sa načítala a je povolená, stav pripojenia, ktorý nie je neplatný, a požiadavku na adresu dostupnú len cez tunel. Každé samo o sebe zavádza; spolu hovoria, čo aplikácia môže vedieť, a nie čo používateľ predpokladá.
Zapíšte výsledok ako tri riadky v diagnostike, nie ako jeden boolean. Keď používateľ tvrdí, že VPN je vypnutá, a vaša aplikácia nesúhlasí, tri riadky ukážu, ktoré pozorovanie sa rozišlo, a to je rozdiel medzi tiketom podpory, na ktorý môžete reagovať, a tiketom, ktorý skončí pri «mne to funguje».