Насчёт сбора актуальной информации об адресах generate_204.
TL/DR: Следующие 4 абраза описывают, зачем оно всё нужно. Сам тест находится ниже.
Приложение использует эти адреса для того, чтобы понять, есть ли у устройства доступ в интернет и нужно ли авторизовываться в сети. Аналогичный механизм использует и сам Android, однако там всё не так надёжно. Дело в том, что провайдеры (особенно МаксимаТелеком) перехватывают запросы к этим адресам и таким образом манипулируют информацией о состоянии Wi-Fi в системе. Приложение проверяет результаты этих проверок по HTTPS, полностью исключая ложно-позитивные случаи и сокращая ложно-негативные. Android ничего не перепроверяет и всегда использует
один из четырёх адресов.
Так вот, вы, скорее всего, замечали, что когда приложение в первый раз авторизуется в сети, Android показывает, что интернет есть. Затем, спустя несколько минут, рядом со значком Wi-Fi появляется
восклицательный знак. При этом доступ в интернет есть, но Android считает, что его нет. Это происходит из-за того, что провайдер намеренно подменяет ответ generate_204. В данном проекте это состояние получило название
midsession (по параметру в адресе перенаправления). В данный момент приложение невосприимчиво к этой подмене, поэтому оно показывает "Уже подключено".
При чём тут Private DNS? Так как для работы Private DNS нужно соединение с определённым внешним сервером, Android блокирует DNS запросы, пока нет интернета. Это логично, так как задача Private DNS — не допускать утечек запросов к провайдеру. Но откуда Android знает, что интернета нет? Правильно, из результата generate_204. В итоге получается, что пока провайдер обманывает систему, DNS запросы из неё отправляться не будут, а значит и доступа в интернет у приложений не будет. Наше приложение обходит эту проблему при помощи собственного вшитого DNS-клиента, но остальным это не поможет.
Раз мы не можем заставить Android более надёжно проверять соединение с интернетом, нужно решать проблему с midsession. Для этого придётся немного снизить надёжность проверки в приложении, чтобы оно реагировало на подмену и делало то, что хочет провайдер — смотрело рекламу. Вот для этого и нужно обновить информацию об адресах, найти надёжные и ненадёжные. Издалека зашёл, да? :D
—
В общем, если у вас есть
Termux или вы можете его установить (root не требуется), то у меня есть для вас
скрипт, который опросит различные адреса generate_204 и выведет их IP-адреса и коды ответов.
Подготовка (всё делается в Termux):
pkg install -y curl dnsutils; curl -s 'https://gist.githubusercontent.com/TheDrHax/2890644afe52785ac13eeacfdd645c31/raw/gen_204.sh' > gen_204.sh
Запуск скрипта:
bash gen_204.sh
—
Инструкция по сбору данных:
1. Подождите, пока Android покажет восклицательный знак у Wi-Fi или уведомление "Требуется вход в сеть", но при этом чтобы был доступ в интернет (тот же ВК и подобные приложения должны быть способны подключиться). Только не проверяйте интернет через браузер! (ну или хотя бы не заходите на сайты без шифрования);
2. Запустите скрипт, сделайте снимок результата;
3. Отправьте этот скриншот мне в ЛС
@TheDrHax, желательно уточнив при этом вид транспорта и город;
—
Для продолжения работы мне достаточно 1-2 отчёта из московского и питерского метро. Наземный транспорт тоже интересен, но с ним сложнее — соединение не такое стабильное. Я напишу ждесь сообщение, когда вся информация будет собрана, чтобы вам не пришлось повторять одно и то же лишний раз. Заранее спасибо! :)