Android ilovasi VPN tashqarisida nomlarni hal qiladi: bog'lash bo'yicha tekshiruv ro'yxati
VPN yoqilgan bo'lsa ham Android standart tarmoq orqali nomlarni hal qilishi mumkin. Jarayonni VPN tarmog'iga bog'lang va ilova aslida qaysi resolver ishlatganini tekshiring.
Android ilovasi ichki nomni hal qila olmayapti, holbuki VPN mijozi o'z brauzeri unga yetib boradi va xuddi shu build boshqa telefonda ishlaydi. URL o'zgaruvchi emas. O'zgaruvchi — ilova jarayoniga nomlarni hal qilish uchun qaysi tarmoqdan foydalanishga ruxsat berilgani, va Android faol VPN sizning soketlaringiz ishlatadigan tarmoq ekaniga kafolat bermaydi. Bu tekshiruvlarni tartib bilan bajaring va resolver surati sizning taxminingizga to'g'ri kelmasa to'xtang.
1-qadam: ilova qaysi tarmoqda ekanini isbotlang
Holat panelini emas, ilovaning o'z ko'rinishini o'qing. ConnectivityManager orqali faol tarmoqni, uning LinkProperties, DNS serverlar ro'yxati va shaxsiy DNS sozlamasini oling. Agar ro'yxatda VPN resolveri bo'lsa, ilovaning unga yo'li bor; agar unda Wi-Fi resolveri bo'lsa, tunnel bu jarayon uchun standart tarmoq emas.
VPN belgisi faqat tunnel borligini aytadi. U ilova jarayoni unga bog'langanini aytmaydi, va Android har doim nomlarni faol ko'ringan tarmoq orqali yo'naltirmaydi. Boshqa qurilmaga uzatadigan mahalliy VPN ilovalar, internetsiz Wi-Fi tarmoqlar va ishlab chiqaruvchi buildlari ilovani tunnel serverlari o'rniga standart resolverdan so'rab qoldirishi mumkin.
2-qadam: VPN transportini so'rang va jarayonni bog'lang
Ilova tunnel resolveridan majburiy foydalanishi kerak bo'lsa, VPN transportli tarmoqni so'rang va callbackda jarayonni bog'lang, shunda kod tarmoq qachon paydo bo'lishini taxmin qilmaydi:
val request = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_VPN)
.build()
connectivityManager.requestNetwork(request, object : NetworkCallback() {
override fun onAvailable(network: Network) {
val bound = connectivityManager.bindProcessToNetwork(network)
Log.i(TAG, "bound to VPN network: " + bound)
}
})
Bu chaqiruv butun jarayonning standart tarmog'ini o'zgartiradi, shuning uchun undan keyin yaratilgan har bir soket undan foydalanadi. Allaqachon mavjud soketlar o'zlari yaratilgan tarmoqni saqlaydi, shuning uchun bog'lashdan oldin ochilgan ulanishlar hovuzi eski yo'l bilan hal qilishni davom ettirishi mumkin. Qaytarilgan qiymat boolean, va false natija bog'lash sodir bo'lmaganini bildiradi; qisqa kechikish bilan qayta urinib, ikkala urinishni ham jurnalga yozing.
3-qadam: bog'lashni faqat kerakli narsa bilan cheklang
Butun jarayonni bog'lash qo'pol. Telemetriya, yangilanish tekshiruvlari va uchinchi tomon SDKlari ham tunnelga o'tadi, va tunnelda internet bo'lmasa, ular ishlamay qoladi. Bitta so'rov uchun tarmoqning soket fabrikasidan foydalaning, qolgan hamma narsani qurilmaning standartida qoldiring. Ataylab bitta modelni tanlang: har bir ulanish uchun tor bog'lash yoki VPN yo'qolganda aniq yechish bilan jarayon bog'lashi.
Resolverning ikkita xususiyati bog'lashni hech qanday xatosiz yengishi mumkin. Qattiq rejimdagi shaxsiy DNS so'rovlarni tarmoq resolveri o'rniga nomlangan DoT serveriga yuboradi, va o'z DNS-over-HTTPS mijozini olib keladigan ilova tizim resolverini butunlay chetlab o'tadi. Bog'lash muvaffaqiyatsiz bo'ldi degan xulosaga kelishdan oldin ikkalasini tekshiring. VPN DNS serveriga hech qachon yetib bormaydigan so'rov tunnel tomonidagi hech bir jurnalda ko'rinmaydi.
4-qadam: CONNECTED chekloviga ishonmang
WorkManagerdagi NetworkType.CONNECTED tarmoq ulanganligini bildiradi, va VPN transporti ostidagi Wi-Fi yoki uyali aloqa yo'qolgan bo'lsa ham buni qanoatlantiradi. Vazifa bajariladi, har bir so'rov muvaffaqiyatsiz tugaydi, va qayta urinish siyosati uni rejalashtirish xatosi kabi ko'rinadigan bo'ronga aylantiradi. Tunnel — tarmoq; cheklov hech qachon internet tekshiruvi bo'lmagan.
Ishga haqiqatan kerak bo'ladigan qobiliyatni tekshiring, masalan tasdiqlangan internet kirishi, va orqaga chekinish bilan cheklangan qayta urinish siyosatini saqlang. Agar ishga shaxsiy nom kerak bo'lsa, ishni bajarishdan oldin o'sha nomni tanlangan tarmoqda hal qiling, va muvaffaqiyatli bo'la olmaydigan so'rovni takrorlash o'rniga aniq xato bilan tezda to'xtang.
5-qadam: dalillarni yozib oling va diapazonni qayta sinab ko'ring
Tanlangan tarmoqning transport turlarini, LinkProperties dan DNS serverlarni, bog'lash true qaytargan-qaytarmaganini va birinchi so'rovning aniq xatosini jurnalga yozing. Keyin o'sha bog'lash ostida shaxsiy nom va ommaviy nomni ishga tushiring. Bu juftlik ilova tunnel resolveridan foydalanganini yoki jimgina qurilma standartiga qaytganini ko'rsatadi, va bu foydalanuvchi his qiladigan farq.
Qo'llab-quvvatlaydigan eng eski Android versiyasida va bitta joriy relizda takrorlang. Standart yo'lni to'g'ri ko'rsatadigan resolver xatti-harakati — qurilmalar va versiyalar farqlanadigan aynan o'sha joy, va faqat eng yangi sinov qurilmasida o'tadigan build siz yetkazib beradigan diapazon uchun tekshirilmagan. adb shell dumpsys connectivity xatoni qayta hosil qilayotganingizda qurilma qaysi tarmoqlar va qobiliyatlarni xabar qilishini tez tasdiqlash usulidir.