Эта история началась не с конкретного приложения, а с задачи, которая меня давно мучает: можно ли сделать простую диагностику для ситуации «у меня не работает интернет» — такую, чтобы человек запустил её самостоятельно и сразу проверил десяток сайтов и заодно состояние сети. Полностью заменить человека такой тест, конечно, не сможет. Но заметно сузить круг возможных причин — вполне.

 Рыбинское водохранилище, Ярославская область, где я впервые столкнулся с белыми списками. Фото: автор.
Рыбинское водохранилище, Ярославская область, где я впервые столкнулся с белыми списками. Фото: автор.

Родственники и друзья

У всех есть человек, которому звонят, когда «интернет не работает». В нашей семье и большой дружеской компании — это я — единственный и неповторимый, кто хоть как‑то понимает, что там внутри творится и почему «сайт не открывается» — это десяток разных болячек, а не одна.

Пока человек рядом, всё проще: взял телефон, минута (хотя на самом деле 30 минимум) и диагноз готов. Проблемы начинаются на расстоянии. «У меня ничего не грузится» в телефонную трубку — это задача без условий. Деньги кончились? Мобильный не ловит? Вай‑фай подключён, а роутер молчит? Приложение заглючило? Человек на том конце не отличит одно от другого и описать ничего не может, он и так уже нервничает. А ты пытаешься оставаться спокойным, не сорваться, пытаясь решить проблему с человеком, который на мой взгляд элементарные вещи не понимает.

Так я и прожил пару лет (с «замедления» ютуба как минимум) — живым скриптом техподдержки для родни и друзей. И вот недавно подумал: мне не хватает какого‑то написанного сценария для моей личной техподдержки. Каждый раз нужно всё по новой вспоминать и начинать дистанционно заставлять непонимающего ничего человека перебирать все пункты диагностики. Сценарий разбора проблемы живёт у меня в голове, но постоянно затуманивается, детали вылетают. Я подумал, может быть не просто пункты на бумаге прописать, а вынести всю идею наружу — в простой инструмент диагностики. Запустил проверку — и хотя бы понял, в какую сторону копать.

Детектор «белых списков», о котором дальше, — только один кусочек той идеи. Но с него удобно начать разговор о том, насколько вообще можно автоматизировать такую бытовую диагностику.

Почему простая диагностика — это сложнее, чем звучит

Сформулируем по пунктам, а не мечтательно. У такого решения сразу появляется набор конкретных «нельзя»:

  • нельзя ничего настраивать — человек на том конце не введёт ни адрес, ни ключ, он и слово «ключ» не так поймёт;

  • нельзя рассчитывать на меня или на удалённый доступ (намного больше времени уйдёт на установку удалённого доступа);

  • работаем на обычном Android‑смартфоне, без root‑доступа;

  • на выходе — не лог для инженера, а человеческое: «позвони оператору», «перезагрузи роутер» (желательно с уточнением, как именно его перезагрузить), успокоительное «ты ничего не сломал, выдохни».

И тут сразу стена: данных‑то у нас почти нет. Баланс не видим — он у оператора. Роутер не видим — он вообще не наш. DPI не видим — про него можно только гадать по поведению соединений, когда устройство конкретно в твоих руках. Всё наше богатство — то, что Android сообщает обычному приложению, плюс результаты наших собственных запросов к сайтам. По сути, мы смотрим на сеть снаружи и пытаемся понять её состояние по доступным признакам.

Из этого сразу следует неприятное, но честное: такая диагностика не поставит точный диагноз, она только сузит круг возможных причин. Не «виноват оператор», а «связь есть, часть сайтов не работает — похоже на ограничения сети». Для обывателя это уже победа: он перестаёт чинить то, что не ломалось.

Что может скрываться за «ничего не грузит»

Чтобы такая диагностика чего‑то стоила, надо сначала понять, что именно может скрываться за словами «не работает». У набившего оскомину «нет интернета» причин набирается немало:

  1. Деньги: баланс на нуле, тариф изменился, подключили дополнительную услугу без предупреждения, сим‑карту заблокировали, включился режим тишины после возвращения из заграницы.

  2. Радио: нет сигнала, режим полёта, сим‑карта не вставлена, вай‑фай не подключён.

  3. Локальная сеть: вай‑фай есть, а у роутера нет интернета; captive portal; кривой DNS.

  4. Транспорт и политика сети: белые списки, DPI, троттлинг, подмена DNS, «а ты, случайно, не на VPN».

  5. Приложение и телефон: глючит конкретное приложение, приложению нужно обновление; сбилось время — и привет, битый TLS; что‑то с сертификатами.

  6. Сам сайт: бывает и сайты ломаются.

Диагностика — это не просто «да/нет», а последовательное исключение возможных причин. И тут есть простое, но важное правило: нечего рассуждать про белые списки, если человек банально в режиме полёта.

Как приложение понимает, что происходит с интернетом

С белыми списками оказалось проще, чем с балансом или роутером: их можно определить по тому, какие сайты открываются, а какие нет. И это именно то, что можно и нужно автоматизировать: раньше нужно было держать в голове список сайтов, которые не работают всегда или во время белых списков, вручную их проверять в браузере или пинговать.

Проверять один, два или три сайта — бессмысленно, а 12 сайтов — уже долго и муторно. К тому же отдельные сайты могли просто временно не работать. Поэтому приложение параллельно тестирует три группы сайтов лёгкими HTTPS‑запросами. Первые две группы — сайты, которые обычно работают в России: группа «Белый список» говорит сама за себя и группа «Обычный интернет» — те, что становятся недоступны во время белых списков на мобильном интернете, но работают на домашнем интернете всегда. Но чтобы словить состояние сети VPN или даже вне РФ — добавил третью — сайты, всегда заблокированные в РФ. Для проверки сайтов используется команда curl с установленным таймером на 5 секунд (чтобы не подвисло приложение во время проверки). Сайт ответил — ставим зелёную галочку, соединение оборвалось или без ответа — ставим красную. Вручную проверять не надо, записывать в блокнот результаты по каждому сайту — не надо. Бинго! Вот так выглядят 3 группы сайтов:

Группа

Что проверяет

Примеры

Белый список

Эталон доступности

Яндекс, ВК, Госуслуги, Mail ru

Обычный интернет

Сайты вне списка

Habr, 4PDA, Google, Википедия

Заблокированные

Контрольная группа

BBC, X, Rutracker

Списки сайтов можно настроить под свой регион прямо в приложении: изменить все три группы, добавить или удалить сайты, а при необходимости сбросить всё к стандартным значениям.

Вердикт выносится по большинству в каждой группе:

  • Белый список работает, обычный интернет нет — включён белый список

  • Работают обе группы — всё в норме

  • Не работает ничего — интернета нет вообще

  • Открываются даже заблокированные — включён VPN или вы вне РФ

Почему именно по большинству? Если один сайт временно упал, это не должно менять общий результат проверки.

При этом приложение не знает, что происходит внутри сети оператора. Оно видит только результаты собственных запросов, поэтому окончательный вердикт всё равно остаётся вероятностным. Не «виноват оператор», а «связь есть, часть сайтов не работает — похоже на ограничения сети».

Приложение показывает тип сети и предупреждает, что на вай‑фай результат может быть нерепрезентативен — кроме случая, когда вай‑фай раздаёт 3G/4G‑роутер: такой интернет тоже попадает под белые списки.

Если трафик устройства идёт через VPN‑туннель, приложение тоже об этом предупреждает: проверка в таком случае показывает интернет «через VPN», и для оценки реальной сети его стоит отключить. Определяется это только штатными средствами Android — без сканирования установленных программ и без сторонних сервисов геолокации.

Где можно ошибиться

Конечно, такой способ не даёт стопроцентной гарантии. Отдельный сайт может временно не работать сам по себе — именно поэтому проверяется сразу несколько адресов и результат считается по большинству.

Обход блокировок тоже меняет картину: через него могут открываться сайты, которые без него недоступны. Поэтому приложение отдельно предупреждает, если видит VPN‑соединение.

Есть нюанс и с вай‑фай. Сам по себе значок вай‑фай ещё ничего не говорит о том, откуда приходит интернет. Это может быть обычный домашний провайдер, а может быть 3G/4G‑роутер на даче с сим‑картой, на который действуют те же ограничения мобильной сети.

Наконец, пользователь может изменить состав всех трёх групп сайтов. Это сделано специально: доступность ресурсов может отличаться в зависимости от региона и оператора. Но вместе с гибкостью появляется и ответственность — от выбранных сайтов зависит результат проверки.

По‑человечески

Вот тут прячется половина всей работы. Инженеру хватит «TLS RST на второй группе». А человеку на том конце надо совсем другое: «Интернет есть. Часть сайтов не работает — похоже на ограничения сети, а не поломку. Ты ничего не сломал, телефон чинить не надо». Вердикт обязан превращаться в бытовое действие: позвони оператору, глянь баланс, перезагрузи роутер, подожди. Диагностика, которая уверенно выдаёт ложный результат, хуже, чем отсутствие результата: поэтому язык вердиктов и честное «мы не уверены на все сто» — это не вежливость, а суть.

Проверки в фоне

До этого момента речь шла о проверке, которую запускают, когда уже всё сломалось. Но у белых списков есть отдельная подлость: они включаются молча, в фоне, без предупреждений. Никто не пришлёт СМС «внимание, режим сети изменится с такого‑то времени». А по факту уведомление в СМС приходят уже после того, как сеть починилась.

Так случилось со мной на чудесном Рыбинском водохранилище на даче у друзей. Работая дистанционно, я могу себе позволить уехать отдыхать, когда мне удобно и куда угодно. Но оказалось, что теперь ты выезжаешь не только на природу, но и в непредсказуемое безинтернетье.

Ждёшь важное сообщение от босса, подумал — странно, что долго молчит. Идёшь, проверяешь телефон — а любимый мессенджер уже неизвестно сколько висит в статусе «Соединение…», а ты этого просто не заметил. То есть мало ответить «что сломалось сейчас» — надо ещё вовремя поймать сам момент, когда режим сети переключился. Значит, проверка должна уметь запускаться сама и при необходимости присылать уведомление.

Тут обнаружилось ещё одно ограничение: Android не даёт обычному приложению бесконечно что‑то проверять в фоне. Для периодической фоновой работы я использовал WorkManager, а у него минимальный интервал — 15 минут. Причём Android может отложить очередную проверку, например когда телефон долго лежит с погашенным экраном.

Можно было бы проверять чаще, но тогда пришлось бы держать приложение постоянно активным, показывать служебное уведомление и сильнее расходовать батарею. Для моей задачи это уже перебор.

Поэтому остановился на компромиссе: лёгкая проверка примерно раз в 15 минут, а уведомление появляется только тогда, когда состояние сети изменилось. Мне важнее узнать, что обычный интернет сменился белым списком или вернулся обратно, чем получать четыре одинаковых уведомления в час.

Что уже работает

Верхний, транспортный слой я довёл до ума и завернул в маленькое Android‑приложение с открытым кодом, назвал «Белый список?». Оно шлёт лёгкие HTTPS‑запросы по группам, показывает живой статус каждого сайта и выдаёт сводный вероятностный вердикт: норма / похоже на белый список / интернета нет совсем / похоже на обход блокировок или вы вне РФ. Есть виджет на рабочий стол и фоновая проверка с уведомлением при смене режима (та самая), плюс — Android TV.

Почему начал с белых списков, а не с «денег» или «роутера»? Во‑первых, сейчас это реальная проблема для многих. Во‑вторых — это одна из тех сложных причин, которую реально видно снаружи, по поведению этого самого чёрного ящика, без всяких привилегий. И сразу оговорюсь, потому что спросят: это диагностика и не обход. Приложение ничего не открывает и не разблокирует — только щупает и сообщает вердикт. Код открытый, так что и группы хостов, и правила вердикта можно посмотреть и поспорить:

И честно про размах: сделать одно и то же приложение для телефона, ТВ, компьютера и роутера не получится. Сам принцип диагностики переносится, а реализация для разных устройств уже будет отличаться. На Android TV работает то же приложение, а ПК и роутер — совсем другая песня и другой доступ. Поэтому реалистичный вариант — отдельные инструменты для разных устройств, работающие по общей методике.

Вопросы в студию

Упирается всё вот во что: проблемы с балансом и роутером снаружи почти не видны — без оператора или доступа к самой сети обычному Android‑приложению до них практически не добраться. Кстати, может возможно реализовать отправку USSD‑команд из приложения без запроса критических разрешений? Поэтому реалистичная цель — не полный диагноз, а быстрая сортировка: «твоя» это беда или «не твоя», и куда смотреть.

Собственно, ради этого вопроса всё и затевалось: какие ещё признаки проблемы можно увидеть снаружи и автоматически проверить так, чтобы с этим справился не‑эксперт? Что ещё можно получить от обычного Android без root‑доступа, чего я пока не использую? Критикуйте в комментариях — особенно по составу групп хостов и по правилам, которые превращают наблюдения в вердикт. Поэтому и пишу вот этот текст.

P. S. Сразу после публикации приложения мне поступили несколько писем от пользователей. Часть их идей уже реализована в последних версиях.

P.P. S. И ещё одно фото прекрасной воды с Рыбинки:

Пляж на Рыбинском водохранилище в Ярославской области. Фото: автор статьи.
Пляж на Рыбинском водохранилище в Ярославской области. Фото: автор статьи.

Комментарии (8)


  1. antirek
    27.08.2026 01:54

    зачем приложение? может просто веб-страничку?


    1. starostagogo Автор
      27.08.2026 01:54

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


  1. gl_uk
    27.08.2026 01:54

    Думаю не хватает проверки DNS

    Еще не плохо добавить тип блока - на чем валится соединение? Ip бан, 16кб блок, и ТД

    Вот примерно как тут описали:

    https://habr.com/ru/articles/1032572/


    1. starostagogo Автор
      27.08.2026 01:54

      Спасибо за идею и ссылку на статью - прочитал, задумался. Автор предлагает метод диагностики причин блокировок. У меня - самого факта белый список или нет. Вердикт строится как “достучались/не достучались” по группам, без разбора причины обрыва. Различать IP-бан, блок по SNI, обрыв на 16 КБ — это следующий уровень: сложнее и менее надёжно детектируется снаружи без рута, но направление верное. Подумаю, что из этого реально вытащить штатными средствами.


      1. Dzzzen
        27.08.2026 01:54

        А чем не устраивает мобильное приложение оператора сотовой связи? В нем черным по белому написано, когда интернет ограничен.


        1. starostagogo Автор
          27.08.2026 01:54

          Если честно - впервые об этом слышу. Надо будет проверить. Один раз, наоборот, был случай, когда в службе поддержки меня уверяли, что из-за неработающего интернета нужно обращаться к владельцам самих неработающих сайтов, а оператор здесь не при чём!

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


  1. redtom
    27.08.2026 01:54

    Скачал, пушка, спасибо!


    1. starostagogo Автор
      27.08.2026 01:54

      Спасибо за отзыв! Если будут замечания по работе или предложения по улучшению, да и вообще критика по делу - рад выслушать!