![](https://habrastorage.org/webt/i1/kl/mv/i1klmvcs9azzyrzvqany1ypbbj4.png)
Идея
![](https://habrastorage.org/webt/qx/3h/ok/qx3hokeqhgesfjbq52huv5fols0.png)
Как работает расширение
- Скачивает базу РКН и хранит её локально.
- В текущей вкладке проверяет URL (есть ли он в базе).
- Вырезает домен из URL и проверяет, есть ли домен в базе.
- Проверяет текущий ip-адрес в базе, по которому загружен текущий сайт.
- Проверяет принадлежность ip-адреса заблокированным подсетям.
- Показывает отчёт в форме иконки. Если её нажать, то чуть более подробная информация.
Вот и всё, никакой магии. Проверка домена всегда доступна, даже если сайт не грузится, блокируется, подменяется и т.д. — потому что анализируется строка адреса, то есть URL, который вы вбиваете в строке адреса или который появляется там сам. Все проблемы связаны только с проверкой ip.
А что если в браузере прокси?
![](https://habrastorage.org/webt/u3/mq/dg/u3mqdg1qgetgkvnabkvoafewdkm.png)
А если сайт заблокирован провайдером?
Другая техническая трудность — это определение текущего ip, когда сайт недоступен (предположительно заблокирован, а обход блокировок не настроен). В этом случае браузер не предоставляет информацию об ip-адресе. А нам нужен именно тот ip, по которому браузер пытается установить соединение — и его определить невозможно, увы. Но проверка по URL и домену при этом работает исправно.
А что, если сайт просто лежит?
![](https://habrastorage.org/webt/rl/pw/m4/rlpwm4yjwg-wah2zzp5o5tc7i04.png)
Что если провайдер перенаправляет DNS?
Если у провайдера блокировка на уровне DNS, то расширение будет получать ложный текущий ip сайта и не подозревать об этом. И наоборот, если вы пропишите нужные ip в файл hosts (или даже у вас свой DNS-сервер), то во всплывающем отчёте будут именно они. Проверка по URL и домену при этом работает исправно, т.к. они берутся из строки адреса в браузере.
Пытаемся решить проблемы с ip
В качестве полумеры для решения подобных проблем расширение осуществляет DNS запрос и определяет все ip сайта, а также их статус нахождения в базе РКН. При этом расширение точно не знает, какой из нескольких ip используется в данный момент для обращения к проверяемому сайту. Поэтому если хоть один ip заблокирован, то расширение бьёт тревогу и меняет цвет иконки на красный.
Для получения DNS записей приходится использовать внешний сервис через HTTP-DNS, потому что сам браузер не позволяет резолвить адреса. Но это и хорошо, т.к. провайдеры не блокируют и не перенаправляют подобные запросы. Надёжность информации высокая. Можно использовать днс от Google или Cloudflare, а также пользователь brzsmg захостил вечный бесплатный днс, за что ему спасибо.
Где взять свежую базу РКН?
Конечно же, отдельный квест был поиск наиболее адекватной базы РКН. Дело в том, что сам РКН не держит базу в открытом доступе. Вместо этого он предлагает провайдерам использовать цифровую подпись для доступа к базе. У меня лишней ЭЦП под рукой не оказалось. Между тем, РКН рекомендует провайдерам обновлять базу раз в час. А некоторые «срочные» обновления базы происходят ещё чаще. То есть ковровая блокировка может задеть ключевые (или ваши) ресурсы всего на пару часов, а потом исчезнуть, как ни в чём не бывало. Наиболее приемлемым оказался часто обновляемый файл на github. Спасибо добрым людям!
Заглушка провайдера
Ситуации, когда показывается заглушка провайдера, расширение распознаёт. Оно запоминает информацию о странице, с которой был редирект на заглушку, и показывает информацию о сайте, а не о заглушке. Сейчас поддерживаются: Ростелеком, МТС, Билайн, Йота, ТТК, Дом.ру. Если у вас особая заглушка у провайдера, её можно указать в настройках, и она будет распознаваться (не будет рассматриваться, как сайт).
Заключение
Какие ещё хотелки добавить? Пишите. Как по мне, расширение имеет уже законченный вид. Дальше остаётся исправление мелких багов раз в год (если найдёте).
Насчёт будущего RKN Alert ничего сказать не могу, потому что он завязан на работу внешних сервисов, а также зависит от наличия базы в свободном доступе. Но пока я жив, мониторю ситуацию. Выход, думаю, всегда найдётся.
Спасибо всем, кто помогает! Всем добра!
![](https://habrastorage.org/webt/fk/bc/5u/fkbc5u0hht27ck_km82e4mj8rzw.png)
Only registered users can participate in poll. Log in, please.
Полезно ли расширение?
64.22% Интересная вещь, заценим219
7.04% Бесполезная поделка24
28.74% Я параноик, не устанавливаю ничего лишнего98
341 users voted. 100 users abstained.