Vai iPhone ir VPN tīklā? Ko iOS lietotne patiešām var redzēt
iOS SDK nav vienas VPN karodziņa. Lietotne var novērot tikai savu konfigurāciju, statusa paziņojumu un ierobežotu starpniekservera momentuzņēmumu, ne vairāk.
Pajautājiet iOS lietotnei, vai tālrunis ir VPN tīklā, un godīgā atbilde ir tāda, ka tā to nevar zināt tādā nozīmē, kā jūs domājat. SDK nepiedāvā karodziņu «ierīce ir tunelī», un privātās saskarnes, kas tam varētu pietuvoties, ir slēgtas izlaižamām lietotnēm. Jūs varat novērot savas lietotnes konfigurāciju, ar to saistīto stāvokli un vienu vai divus netiešus mājienus no tīkla steka. Katrs atbild uz citu jautājumu, un lielākā daļa salauzto pārbaužu rodas no tā, ka kāds no tiem tiek uzskatīts par visu atbildi.
Viena VPN karodziņa mīts
Tiek uzskatīts, ka kaut kur SDK ir īpašība, kas ziņo, vai ierīce ir tunelī, tāpat kā sasniedzamības karodziņš ziņo, vai resursdators atbild. Šādas publiskas īpašības nav. Un pat ja tā būtu, «tunelis pastāv» un «mans trafiks to izmanto» ir atšķirīgi apgalvojumi, un lielākajai daļai lietotņu svarīgs ir tikai otrais.
Tieši šī plaisa ir iemesls, kāpēc bibliotēkas, kas reklamē vienas rindas VPN detektoru, parasti nolasa kaut ko trauslu, piemēram, saskarnes nosaukumu vai starpniekservera atslēgu, un pasniedz to kā spriedumu.
Ielādējiet iestatījumus, pirms uzticaties nil
Koplietotā pārvaldnieka instance pastāv, tiklīdz to pieprasāt, bet tās protokola īpašība paliek nil, līdz beidzas ielādes atzvanīšana. Tāpēc nil protokols nozīmē «vēl nav ielādēts» vismaz tikpat bieži, cik «nav instalēts». Lasiet pabeigšanas blokā un tikai pēc tam izlemiet: esošs protokola objekts ar ieslēgtu aktivizēšanas karodziņu — tā izskatās «instalēts».
Otrs signāls ir savienojuma objektā: nederīgais stāvoklis, ko sistēma ziņo, kad šai lietotnei nav instalētas konfigurācijas. Nederīgs stāvoklis kopā ar nil protokolu pēc pabeigtas ielādes ir īsta neesamība, nevis laika sacensība.
Savienojuma izmaiņas nāk kā paziņojumi
Apstrādātāji, kas nodoti load un save, ziņo, kas notika ar konfigurāciju, nevis ko dara tunelis. Gaidīšana, ka kāds no tiem iedarbosies savienošanās brīdī, ir sacensība, kas nekad neatrisinās. Tā vietā sekojiet stāvokļa maiņas paziņojumam un nolasiet savienojuma objekta pašreizējo vērtību, kad tas pienāk.
Kad konfigurācija ir instalēta, savienojuma stāvoklis iziet īsu secību: atvienots, savienojas, savienots, atkārtoti apstiprina, atvienojas. «Savienots» raksturo tuneli, nevis serveri aiz tā, tāpēc tas nav pierādījums, ka trafiks plūst. On-demand var pacelt tuneli arī tad, kad lietotne ir apturēta, un tad paziņojums pienāk pirms tam, kad jums ir ko atjaunināt.
Ierobežotais starpniekservera momentuzņēmums ir mājiens, nevis spriedums
CFNetwork var nodot lietotnei pašreizējos sistēmas starpniekservera iestatījumus, un šī rezultāta iekšienē ir ierobežota vārdnīca ar atslēgu pēc saskarnes nosaukuma. Nosaukums, kas sākas ar tun, utun, ppp, ipsec vai tap, ir mājiens, ka tunelis pastāv. Tas joprojām ir momentuzņēmums par to, ko šī lietotne var redzēt, nevis apgalvojums par to, kur ceļo paketes.
Pakalpojumu sniedzēji nevienojas par nosaukumiem, tāpēc trūkstošs prefikss neko nepierāda, un esoša saskarne var pastāvēt, nepārraidot trafiku. Sasniedzamība ir vēl vājāka: veiksmīgs pieprasījums uz privātu adresi parāda, ka ceļš šim pieprasījumam tajā brīdī strādāja, nevis ka VPN ir instalēts.
Simulators aizņemas Mac, un citas lietotnes paliek neredzamas
Simulatoram nav sava tīkla steka; katrs tā veidotais savienojums ir Mac dators. Tāpēc VPN, kas darbojas resursdatora Mac, jau ir spēkā simulētajai lietotnei, un paša simulatora iestatījumi neko nerāda. Ja tunelis pacēlās pēc simulatora palaišanas, to restartēt parasti ir ātrāk nekā atkļūdot lietotni. Resursdatoram nestandarta portā ir vajadzīgs šis ports URL adresē vai lokāla pāradresācija, piemēram, socat TCP-LISTEN:12345,fork TCP:host:12345.
Publiskās API neuzskaitīs VPN profilus, kas pieder citām lietotnēm vai konfigurācijas profiliem. Vienai zināmai lietotnei URL shēmas pārbaude ar canOpenURL ir pārnēsājamais triks, un kopš iOS 9 pieprasītā shēma ir jādeklarē jūsu Info.plist; ja to izlaidīsit, izsaukums atgriezīs false. OpenVPN Connect atbild uz openvpn://, kas to padara par labu piemēru un sliktu vispārīgu detektoru.
Apvienojiet trīs novērojumus un pasakiet, ko tie nozīmē
Praksē sakraujiet trīs rezultātus: konfigurāciju, kas ielādēta un ieslēgta, savienojuma stāvokli, kas nav nederīgs, un pieprasījumu uz adresi, kas sasniedzama tikai caur tuneli. Katrs atsevišķi maldina; kopā tie pasaka, ko lietotne var zināt, nevis ko lietotājs pieņem.
Rakstiet rezultātu kā trīs rindas diagnostikā, nevis kā vienu loģisko vērtību. Kad lietotājs saka, ka VPN ir izslēgts, bet jūsu lietotne nepiekrīt, trīs rindas parāda, kurš novērojums atšķīrās, un tā ir atšķirība starp atbalsta biļeti, ar ko jūs varat kaut ko darīt, un tādu, kas beidzas ar «pie manis strādā».