Android 10 va undan keyingi versiyalarda /proc/net/tcp ni ochgan ilova socket jadvali o'rniga kirish rad etilishini oladi. VPN interfeysiga bu ahamiyatsiz: paketlar hali ham keladi, chunki tunnel marshrutlash qarori, fayl ruxsati emas. O'zgargan narsa torroq savolga javob: «bu ulanish qaysi ilovaga tegishli?» O'rinbosar ConnectivityManager.getConnectionOwnerUid, har bir ulanish uchun qo'llab-quvvatlanadigan so'rov, va eski odat bilan yangi API o'rtasidagi tanlov sizda haqiqatan uch ishning qaysi biri borligiga bog'liq: paket qabul qilish, oqimni atributsiya qilish yoki sarfni yig'ish.

Egasi savoliga ikki javob

API 29 dan oldin imtiyozli yoki root jarayon yadro socket jadvallarini o'qishi, to'rtlikni moslashtirishi va egasi UID ni bilishi mumkin edi. Bu bitta faylda butun qurilma inventarini berardi. API 29 dan boshlab fayl tizimi ko'rinishi cheklangan, va qo'llab-quvvatlanadigan yo'l protokol, mahalliy manzil va uzoq manzil bilan har bir ulanish uchun so'rovdir.

QuestionLegacy socket tablesgetConnectionOwnerUid
Who owns this flow?Scan and match the tupleAsk once per tuple
Device-wide inventory?Yes, when readableNo, one flow at a time
Historical usage?NoNo; that is NetworkStatsManager
Works without root?No on modern releasesYes, for authorized callers

Taqqoslash «eski va yangi» emas. Bu ilgari bitta o'qiladigan fayl qondirgan, endi uch xil shartnoma bilan uch xil interfeys qondiradigan uch xil ish.

Mahalliy manzil ilovaning uchi

Metod imzosi protokol, mahalliy socket manzili va uzoq socket manzilini oladi. «Mahalliy» ulanishda ilova tomonini bildiradi, tekshirish paytida paket manbai bo'lib qolgan uchini emas. Uzoq serverdan ilovaga qaytayotgan paketning manbai va manzili bu ta'rifga nisbatan teskari.

ConnectivityManager cm = getSystemService(ConnectivityManager.class);
int uid = cm.getConnectionOwnerUid(
    OsConstants.IPPROTO_TCP, appLocalAddress, appRemoteAddress);

Bu yo'nalish xatosi ishlaydigan so'rovning noto'g'ri javob yoki umuman javob bermasligining eng keng tarqalgan sababidir. Qo'ng'iroqdan oldin ikkala uchini yozib oling va juftlikni ilova haqiqatan ochgan ulanish bilan tasdiqlang. Manzil oilasi ham muhim: IPv4 orqali xaritalangan manzil va mahalliy IPv6 manzili boshqa to'rtliklar, xuddi shu portlardagi TCP va UDP oqimlari ham.

Vakolat va noma'lum natijalar shartnoma qismi

So'rov vakolatli chaqiruvchilar bilan cheklangan, jumladan tegishli foydalanuvchining faol VPN ilovasi. Aloqasiz kuzatuv ilovasi boshqa profil ulanishlarini sanash mumkin deb hisoblay olmaydi, va ruxsatsiz qo'ng'iroq do'stona xato o'rniga xavfsizlik istisnosini tashlashi mumkin. Ikkala natijani ham aniq boshqaring.

Yo'q egasi paket nomi emas. Oqim paket va so'rov orasida yopilgan bo'lishi mumkin, tuple to'liq bo'lmasligi mumkin, yoki chaqiruvchiga bilish ruxsat etilmagan bo'lishi mumkin. Birinchi muvaffaqiyatli javobni keshlab, keyin qayta ishlatish yangi ulanishni eski ilovaga bog'laydi, bu esa noma'lum deb xabar berishdan yomonroq.

Atributsiya muvaffaqiyatsiz bo'lganda, trafik baribir qarorga muhtoj: siyosat talab qilgan joyda bloklang, faqat tushunadigan doirani ruxsat eting yoki bo'shliqni ko'rsating. Bu zaxira dizaynga tegishli, izohga emas.

Hisob boshqa savol

NetworkStatsManager sarfni o'z kirish qoidalari bo'yicha xabar qiladi. U bir UID ma'lum davrda qancha uzatganini aytadi; ixtiyoriy jonli paketning egasini aytolmaydi. Tarmoq imkoniyatlari tarmoq xususiyatlarini tavsiflaydi, socket katalogini emas. Uchtasini aralashtirish izchil ko'rinadigan va aslida bo'lmagan panellar yaratadi.

Qaysi ilovalar tunneldan foydalanishini aniqlashning oddiy holati uchun Android ning qo'llab-quvvatlanadigan ruxsat etilgan va taqiqlangan ilovalar ro'yxatlari hech qanday scraping siz siyosatni ifodalaydi. Oqim bo'yicha atributsiyani haqiqatan kerak bo'lgan holatlarga qoldiring va yo'nalish, ruxsatlar va noma'lum holatlarni birgalikda boshqaradigan qo'llab-quvvatlanadigan amalga oshirish uchun byudjet ajrating.

Asbobni ishga qarab tanlang, keyin chetlarni sinang

Talab tunnel tanlovi bo'lsa, platforma ro'yxatidan foydalaning. Jonli atributsiya bo'lsa, egasi so'rovidan foydalaning va javobsiz har bir to'rtlikni noma'lum deb hisoblang. Tarixiy yig'indilar bo'lsa, stats API dan foydalaning. Keyin sodda amalga oshirishlarni buzadigan uch chetni sinab ko'ring: qarama-qarshi yo'nalishdagi paket, so'rovdan oldin yopiladigan oqim va faol VPN bo'lmagan chaqiruvchi.

Bularning hech biri SELinux ni o'chirish, telefonni root qilish yoki yadro jadvallarini global o'qiladigan qilishni talab qilmaydi. Cheklov mazmunning o'zi: platforma atributsiyani shartnoma orqasiga ko'chirdi, shunda javob faqat qonuniy ravishda muhtoj komponentga yetadi, boshqa hech kimga emas.

O'xshash maqolalar