Tanya aplikasi iOS sama ada telefon berada di atas VPN, dan jawapan jujurnya ialah ia tidak boleh tahu dalam erti kata yang anda maksudkan. SDK tidak mendedahkan bendera «peranti berada dalam terowong», dan antara muka peribadi yang mungkin menghampirinya tertutup kepada aplikasi yang diterbitkan. Anda boleh memerhati konfigurasi aplikasi anda sendiri, keadaan yang terikat padanya, dan satu atau dua petunjuk tidak langsung daripada tindanan rangkaian. Setiap satu menjawab soalan yang berbeza, dan kebanyakan pemeriksaan yang rosak datang daripada menganggap salah satu daripadanya sebagai jawapan penuh.

Mitos satu bendera VPN

Kepercayaan ialah di suatu tempat dalam SDK ada sifat yang melaporkan sama ada peranti berada dalam terowong, seperti bendera kebolehcapaian melaporkan sama ada hos menjawab. Sifat awam sebegitu tidak wujud. Malah jika wujud, «terowong wujud» dan «trafik saya menggunakannya» ialah dakwaan berbeza, dan hanya yang kedua penting bagi kebanyakan aplikasi.

Jurang itulah sebabnya pustaka yang mengiklankan pengesan VPN satu baris cenderung membaca sesuatu yang rapuh, seperti nama antara muka atau kunci proksi, dan membentangkannya sebagai keputusan.

Muatkan keutamaan sebelum mempercayai nil

Contoh pengurus dikongsi wujud sebaik sahaja anda memintanya, tetapi sifat protokolnya kekal nil sehingga callback muat selesai. Jadi protokol nil bermaksud «belum dimuatkan» sekurang-kurangnya sesering ia bermaksud «tidak dipasang». Lakukan pembacaan di dalam blok penyempurnaan, dan hanya selepas itu putuskan: objek protokol yang wujud, dengan bendera pengaktifan hidup, ialah rupa «dipasang».

Isyarat kedua terletak pada objek sambungan: keadaan tidak sah, yang dilaporkan sistem apabila aplikasi ini tidak mempunyai konfigurasi yang dipasang. Keadaan tidak sah bersama protokol nil selepas muat selesai ialah ketiadaan sebenar, bukan perlumbaan masa.

Perubahan sambungan datang sebagai pemberitahuan

Pengendali yang diberikan kepada load dan save melaporkan apa yang berlaku kepada konfigurasi, bukan apa yang terowong lakukan. Menunggu salah satu daripadanya tercetus semasa menyambung ialah perlumbaan yang tidak pernah selesai. Perhatikan pemberitahuan perubahan status sebaliknya, dan baca nilai semasa objek sambungan apabila ia tiba.

Sebaik sahaja konfigurasi dipasang, keadaan sambungan melalui urutan pendek: terputus, menyambung, bersambung, menegaskan semula, memutuskan. «Bersambung» menerangkan terowong dan bukan pelayan di belakangnya, jadi ia bukan bukti trafik mengalir. On-demand juga boleh menaikkan terowong semasa aplikasi digantung, dan kemudian pemberitahuan tiba sebelum anda mempunyai apa-apa untuk dikemas kini.

Petikan proksi berskop terhad ialah petunjuk, bukan keputusan

CFNetwork boleh memberikan aplikasi tetapan proksi sistem semasa, dan di dalam hasil itu ada kamus berskop terhad yang dikunci mengikut nama antara muka. Melihat nama yang bermula dengan tun, utun, ppp, ipsec atau tap ialah petunjuk bahawa terowong hadir. Ia kekal sebagai petikan tentang apa yang aplikasi ini boleh lihat, bukan kenyataan tentang ke mana paket pergi.

Penyedia tidak bersetuju tentang penamaan, jadi awalan yang tiada tidak membuktikan apa-apa, dan antara muka yang hadir boleh wujud tanpa membawa trafik. Kebolehcapaian lebih lemah lagi: permintaan berjaya ke alamat peribadi menunjukkan laluan berfungsi untuk permintaan itu pada saat itu, bukan bahawa VPN dipasang.

Simulator meminjam Mac, dan aplikasi lain kekal tidak kelihatan

Simulator tidak mempunyai tindanan rangkaian sendiri; setiap sambungan yang dibuatnya ialah milik Mac. Jadi VPN yang berjalan pada Mac hos sudah berkuat kuasa untuk aplikasi yang disimulasikan, dan tetapan simulator itu sendiri tidak menunjukkan apa-apa. Jika terowong naik selepas simulator dimulakan, memulakannya semula biasanya lebih cepat daripada menyahpepijat aplikasi. Hos pada port bukan standard memerlukan port itu dalam URL, atau pemajuan setempat seperti socat TCP-LISTEN:12345,fork TCP:host:12345.

API awam tidak akan menyenaraikan profil VPN milik aplikasi lain atau profil konfigurasi. Bagi satu aplikasi yang diketahui, ujian skema URL melalui canOpenURL ialah helah mudah alih, dan sejak iOS 9 skema yang ditanya mesti diisytiharkan dalam Info.plist anda; jika ditinggalkan, panggilan mengembalikan false. OpenVPN Connect bertindak balas pada openvpn://, yang menjadikannya contoh yang baik dan pengesan umum yang buruk.

Gabungkan tiga pemerhatian dan katakan apa maksudnya

Dalam amalan susun tiga hasil: konfigurasi yang dimuatkan dan diaktifkan, keadaan sambungan yang bukan tidak sah, dan permintaan ke alamat yang hanya boleh dicapai melalui terowong. Setiap satu mengelirukan secara bersendirian; bersama-sama ia menyatakan apa yang aplikasi boleh tahu dan bukan apa yang pengguna andaikan.

Tulis hasilnya sebagai tiga baris dalam diagnostik anda, bukan satu boolean. Apabila pengguna berkata VPN dimatikan sedangkan aplikasi anda tidak bersetuju, tiga baris itu menunjukkan pemerhatian mana yang menyimpang, dan itulah perbezaan antara tiket sokongan yang boleh anda tindak lanjuti dan yang berakhir dengan «di tempat saya ia berfungsi».

Artikel berkaitan