Застосунок на телефоні й віддалений сервер починають з різних фактів, і жоден не може позичити факти іншого. Застосунок може запитати операційну систему про мережу, яку використовує, тоді як сервер знає лише те, що надходить через з'єднання. Запуск власної кінцевої точки переписує друге й залишає перше недоторканим. Яке з них відповість на ваше питання, залежить від самого питання.

Дві точки спостереження, два види доказів

Локальні докази описують пристрій. Вони охоплюють інтерфейс, що несе трафік, транспорт, про який повідомляє платформа, і те, що може запитати застосунок, який викликає. Віддалені докази описують з'єднання: адреса джерела, протокол, час і все, що застосунок вирішить надіслати. Жодна точка спостереження не є надмножиною іншої.

Змішування двох дає твердження, які звучать точно й не піддаються перевірці. Маркер доводить щось про мережевий об'єкт на пристрої, а не про те, як віддалена служба класифікує запит.

Перш ніж сперечатися про виявлення, запишіть, якої точки стосується питання. Ідеться про те, чи може конкретний застосунок помітити, що тунель активний, чи про те, чи може служба зробити висновок, звідки надійшов запит? Це окремі дослідження, і відповідь на одне нічого не каже про інше.

Що може повідомити локальний інтерфейс платформи

Android пропонує певний маркер. Об'єкт NetworkCapabilities може повідомляти про TRANSPORT_VPN, а hasTransport перевіряє, чи присутній цей транспорт на об'єкті. Застосунок отримує об'єкт від служби підключень і читає його, з урахуванням дозволу на стан мережі.

Результат — локальна інформація платформи, а не пошук у діапазонах адрес провайдера. Вона описує мережу, яку використовує застосунок, що викликає.

Важливі два обмеження. Правило розділеного тунелю, яке виключає застосунок, може дати на тому самому телефоні іншу відповідь, ніж бачить колега, бо застосунок може бути прив'язаний в іншому місці. Маркер існує ще й тому, що ОС моделює інтерфейси VPN, а не тому, що його збирає якийсь конкретний застосунок. Чи читає застосунок це поле, передає його далі чи ігнорує — це властивість самого застосунку. Його маніфест і документація — єдині надійні джерела з цього питання.

adb shell dumpsys connectivity | grep -i -m5 vpn

Що може бачити віддалена служба

Сервер бачить адресу джерела з'єднання, транспорт і час, і він може збагатити адресу даними реєстру або маршрутизації. Він також може отримати все, що надсилає застосунок, зокрема місцеположення, коли застосунок просить про це, а користувач погоджується. Ці канали роздільні, і лише один схожий на пошук адреси.

Адреса, зареєстрована на хостинг-провайдера, наводить на думку про тунель, а адреса, зареєстрована в житловій мережі, — про домашнє підключення. Обидві є статистичними підказками, а не фактами про пристрій.

Житлова адреса не розміщує людину за цією адресою, а хостингова адреса не називає оператора чи країну. Служба, яка сприймає висновок як певність, іноді помилятиметься, не маючи змоги це виявити. Якщо вимога — надійність, а не евристика, дані адрес її не дадуть, і проєкт, який це визнає, чесніший за той, що приховує здогад.

ДоказНа що відповідаєЧого не може показати
Локальний маркер транспортуЧи є цей мережевий об'єкт VPNХто керує виходом або де розташований пристрій
Віддалена адреса джерелаЯка адреса досягла службиЧи несе пристрій також тунель
Корисне навантаження застосункуЩо застосунок вирішив надіслатиУсе, що застосунок не надіслав

Чому самостійно розміщений вихід змінює лише один бік

Запуск власної кінцевої точки змінює адресу джерела, яку бачить віддалена служба, і це може вивести її за межі діапазонів, які служба пов'язує з комерційними провайдерами. У локальній моделі мережі нічого не змінюється, бо тунель залишається тунелем, і ОС досі повідомляє про нього.

Один бік доказів рухається, інший лишається нерухомим. Розрив між ними — місце, де ламаються очікування.

Браузер — третій випадок зі своїми інтерфейсами й обмеженнями. Вебвміст не може прочитати нативний об'єкт можливостей, і вважати функцію мобільної ОС доступною вебсторінці — категорійна помилка. Якщо питання стосується сайту, вивчіть, що сайт справді може отримати, замість того щоб дослівно переписувати API платформи.

Вирішуйте, виходячи з поставленого питання

Якщо питання в тому, чи може конкретний застосунок спостерігати стан тунелю, інтерфейс платформи — правильне місце для пошуку, і відповідь лежить у коді та дозволах цього застосунку. Якщо питання в тому, що може вивести служба, доказом є метадані з'єднання. Правове чи договірне питання не вирішує жодне з них.

Назвіть питання одним реченням, перш ніж щось збирати. Це речення визначає, яка точка спостереження важлива, і не дає дослідженню зійти в іншу суперечку.

Позначайте кожне спостереження за його джерелом, коли повідомляєте про нього, бо твердження без позначки не можна перевірити. Локальний маркер і висновок з адреси обидва корисні, і жоден не є остаточним, тому зливати їх в один вердикт — помилка.

Коли служба відхиляє авторизоване з'єднання, скористайтеся її підтримуваним шляхом перегляду, а не змінюйте локальне налаштування, щоб приховати сигнал. Видалення одного спостереження ніколи не доводить, що інші зникли.

Схожі статті