Возвращаем авто-логин в Wi-Fi-сеть московского метро в Android

С некоторого времени я стал замечать, что при подключении к московскому метровайфаю на Андроидах перестала вылезать нотификация о том, что необходимо залогиниться. Что было весьма удобно, так как встроенный андроидный HTTP-клиент никогда не показывал мне рекламу, и закрывался сразу же после авторизации, не грузя стартовую страницу wi-fi.ru, также обильно пестрящую рекламой.
Судя по всему, граждане из Максима-Телеком посчитали, что слишком уж много пользователей проплывает мимо их рекламы таким образом и, посчитав себя зело ехидными, точечно разрешили доступ к URL google.com/generate_204, который и запрашивает HTTP-клиент Dalvik для проверки доступности интернета. Из названия ручки очевидно, что ожидается код 204.

Таким образом, эта проверка стала давать false positive, вынуждая пользователя логиниться через браузер, просматривая рекламу. Беглый поиск по данному вопросу выявил наличие в хранилище настроек Android переменной captive_portal_server, которая по умолчанию не установлена, но если записать в нее FQDN какого-нибудь хоста, /generate_204 будет запрашиваться уже с него. Очевидное решение проблемы тут же напросилось само собой.

На своем сервере я добавил в конфигурацию nginx такие строки:

server {
    listen 0.0.0.0:80;
    location /generate_204 {
        return 204;
    }
}

На Android-устройстве выполнил такую команду (да, минус этого способа — нужен root):

root@shamu:/ # settings put global captive_portal_server our-nginx.domain.tld

После чего авторизация заработала, как и прежде :) Надеюсь, этот небольшой лайф-хак будет полезен кому-то, кто, как и я, не горит желанием каждый раз просматривать видео-рекламу при входе в сеть.

P.S. Я не упомянул здесь возможность использования различных программ-авторизаторов, работающих в фоновом режиме, так как сам раньше пользовался подобным софтом, и оказалось, что создатели captive-портала активно противодействуют таким мерам, и рано или поздно авторизация перестает работать

© Habrahabr.ru