Aplikasi kerja gagal di ponsel terkelola, seseorang memeriksa tombol VPN, melihatnya menyala, dan menyatakan jalurnya sehat. Di sinilah sebagian besar diagnosis ini berhenti, dan itu terlalu dini: transport VPN yang aktif tidak mengatakan bahwa permintaan aplikasi ini memakainya, dan proxy yang benar-benar berlaku bisa per aplikasi atau dipilih oleh berkas PAC alih-alih ditampilkan di Setelan. Mulailah dari aplikasi dan profil tertentu yang Anda debug, lalu baca pandangan platform itu sendiri tentang jalurnya.

Mulailah dari aplikasi dan profilnya

Aplikasi berlencana kerja biasanya berjalan di profil terpisah dengan kebijakan jaringannya sendiri. Peramban pribadi di ponsel yang sama bukan buktinya, dan hasil dari perangkat rekan kerja dengan pengelolaan berbeda juga bukan. Catat profil mana yang menjadi tempat aplikasi itu berada sebelum Anda membaca apa pun.

Di Setelan, daftar entri VPN yang dikonfigurasi dan catat siapa pemilik masing-masing. Pada build Samsung, label menu berpindah antar rilis, jadi jelaskan entrinya, bukan jalur menuju entri itu. Entri abu-abu atau terkelola milik siapa pun yang mengelola perangkat; mematikannya sebagai eksperimen mengubah hal yang ingin Anda ukur dan bisa melanggar kebijakan.

Baca status yang dilaporkan platform

Di dalam aktivitas yang sudah ada di perkakas dukungan Anda, pada API 23 atau lebih baru, status jaringan dapat dibaca tanpa mengirim satu byte. Panggilan itu memerlukan izin manifes biasa ACCESS_NETWORK_STATE untuk pembacaan kemampuan.

val cm = getSystemService(android.net.ConnectivityManager::class.java) ?: return
val network = cm.activeNetwork
val caps = network?.let { cm.getNetworkCapabilities(it) }
val hasVpn = caps?.hasTransport(android.net.NetworkCapabilities.TRANSPORT_VPN)
val proxy = cm.defaultProxy

Setiap nilai menjawab pertanyaan yang sempit. Jaringan aktif adalah jaringan default bagi proses pemanggil pada saat itu. Pemeriksaan kemampuan memberi tahu apakah jaringan default itu didukung VPN. Panggilan proxy melaporkan proxy HTTP default yang efektif, dan objek yang dikembalikan dapat menjelaskan proxy statis atau skrip PAC.

Jika Anda memerlukan tampilan per jaringan alih-alih default, baca properti tautan jaringan yang sama dan bandingkan dengan cm.getLinkProperties(network)?.httpProxy. Proxy yang dipasang oleh pengelolaan perangkat muncul di panggilan proxy default dan tidak muncul di properti tautan, yang merupakan cara cepat membedakan proxy dari kebijakan dan proxy dari jaringan.

Simpan keluaran di saluran dukungan Anda alih-alih di laporan publik. Nama host proxy, URL PAC, dan sufiks internal mengungkapkan bagaimana organisasi Anda merutekan lalu lintas, dan tidak satu pun diperlukan untuk menjelaskan kegagalan.

Tafsirkan setiap bidang secara sempit

Jaringan null atau objek kemampuan null berarti status jaringan pemanggil tidak tersedia atau berubah selama pembacaan. Itu tidak berarti tidak ada VPN. Perlakukan sebagai tidak diketahui dan baca lagi setelah aplikasi masuk latar depan, bukan sebagai hasil negatif.

Transport VPN adalah yang paling lemah di antara yang positif. Aplikasi apa pun yang memegang VpnService menghasilkan satu, termasuk aplikasi penyaring lokal yang tidak pernah mengirim lalu lintas Anda ke mana pun. Jadi nilai true mengatakan jaringan default berpendukung VPN ada, bukan bahwa pintu keluar organisasi Anda dipakai dan tentu bukan bahwa pemeriksaan terjadi.

Proxy default null berarti API ini tidak melaporkan proxy HTTP default untuk konfigurasi efektif. Itu menyingkirkan sangat sedikit: aplikasi dapat membawa pengaturan SOCKS sendiri, menerapkan klien HTTP sendiri, atau diarahkan oleh proxy di gerbang yang tidak pernah diketahui perangkat.

PAC adalah kasus yang mengalahkan jawaban satu nilai. Skrip dapat merutekan satu tujuan melalui proxy dan mengirim yang lain langsung, sehingga dua permintaan dari aplikasi yang sama dalam satu detik dapat menempuh jalur berbeda. Dan aplikasi yang mengikat soketnya ke jaringan pilihan, atau memanggil bindProcessToNetwork, tidak wajib mengikuti default sama sekali.

Apa yang tidak dapat dikatakan cuplikan ini

Ini bukan riwayat. Tidak ada yang mencatat jalur mana yang ditempuh permintaan yang gagal, dan pembacaan yang berhasil setelah kegagalan bukan bukti tentang kegagalan. Ini juga bukan inventaris: Anda mendapatkan jaringan default proses pemanggil, bukan daftar koneksi privat setiap aplikasi.

Ini juga tidak mengatakan apa pun tentang apa yang terjadi di atas soket. Jabat tangan TLS yang gagal di perangkat terkelola bisa jadi masalah penyimpanan kepercayaan, ketidakcocokan pinning, atau nama yang ditolak proxy, dan tidak satu pun muncul dalam pembacaan konektivitas.

Itulah sebabnya kedua belah pihak penting bersama: cuplikan mempersempit ke mana harus melihat, dan diagnostik aplikasi sendiri mengatakan apa yang sebenarnya gagal.

Laporkan dalam bentuk yang dapat digunakan administrator

Berikan aplikasi yang terdampak, profil, stempel waktu, dan tahap tepat yang gagal: resolusi nama, koneksi TCP, jabat tangan TLS, atau status HTTP. Tambahkan nilai cuplikan sebagaimana dibaca, dengan null ditulis sebagai null bukan sebagai tidak ada. Catat apakah aplikasi lain di profil yang sama gagal dengan cara yang sama, yang memisahkan masalah aplikasi dari masalah jalur seluruh profil.

Lalu berhenti dan biarkan pemilik jalur menanggapi. Jangan perlakukan sertifikat korporat, alamat proxy, atau entri VPN sebagai izin untuk menghapus pengelolaan atau melewati rute yang disetujui; itu mengubah kasus dukungan menjadi insiden kebijakan.

Kontrak proxy default singkat dan layak dibaca sekali, karena mendefinisikan persis proxy mana yang dilaporkan panggilan itu, dan setiap pembacaan berlebih atas cuplikan ini dimulai dengan menganggapnya melaporkan lebih banyak.

Artikel terkait