rkn-checker-tui
Дружелюбный TUI поверх rkn-block-checker: меню вместо флагов, пресеты вместо параметров, понятные вердикты на русском и история снапшотов с диффом.
Что это
Обёртка над rkn-block-checker — пробником, который послойно диагностирует блокировку: DNS → TCP → TLS → HTTP. Под капотом тот же движок, что и в оригинале. TUI меняет только то, как с этим работает человек.
Не нужно помнить флаги, держать в голове чем TLS_BLOCK отличается от TCP_RESET и руками складывать списки сайтов в JSON. Запустил — увидел статус сети, выбрал режим, получил таблицу с понятным описанием каждой строки. Хочешь сравнить «как было вчера» и «как сейчас» — есть снапшоты и diff.
Возможности
- Стартовая диагностика сети — VPN / фильтрация / норма с IP и ISP в шапке
- Три пресета сканирования — Быстрая / Стандартная / Тщательная
- Четыре режима — whitelist + blacklist, только whitelist, только blacklist, ad-hoc URL
- Понятные вердикты на русском — что произошло физически и почему это блокировка
- Свои списки сайтов — кастомные whitelist / blacklist в формате
name=url - Снапшоты и diff — сохранить результат, сравнить с прошлым, увидеть регрессии и восстановления
- История ad-hoc URL — последние проверки запоминаются
- Конфиг переживает перезапуск —
~/.config/rkn-tui/config.json, атомарная запись
Требования
- Python 3.10+
- Linux или macOS (Windows не тестировался, теоретически работает через WSL/Terminal)
- Терминал с поддержкой Unicode и 256 цветов
- Сеть наружу (без неё движок ничего не покажет)
Установка
Через pipx (рекомендуется):
pipx install rkn-checker-tui
Через uv:
uv tool install rkn-checker-tui
Из репозитория (для разработки):
git clone https://github.com/howdeploy/rkn-checker-tui
cd rkn-checker-tui
pipx install --editable .
Запуск
rkn-tui
При старте проиграет диагностика сети (~3–5 секунд) и откроется главное меню.
Главное меню
| Пункт | Что делает |
|---|---|
| Проверка подключения | Whitelist + blacklist одним сканом (быстрый ответ «всё ли вообще работает») |
| Только blacklist | Сайты, которые обычно режет ТСПУ |
| Только whitelist | Контрольная группа — должны открываться |
| Ad-hoc URL | Проверить конкретный сайт или несколько разом |
| История | Снапшоты прошлых сканов, открыть и сравнить |
| Настройки | Дефолтный пресет, кастомные списки |
| Помощь | Что значат вердикты |
| Выход | q тоже работает |
Хоткеи
↑/↓— навигация по меню и таблицамEnter— открыть пункт←/→— фильтр в таблице результатов (Все / OK / Заблокировано)s— сохранить снапшот текущего сканаEsc— назадCtrl+S— сохранить настройкиCtrl+P— командная палитраq— выход
Пресеты
Пресет управляет тем, как сканируется (параллелизм, таймауты, представление клиента), а режим — что сканируется (какой набор URL).
| Пресет | Workers | Timeout | Identify UA | Когда брать |
|---|---|---|---|---|
| Быстрая | 20 | 3.0 с | нет | Частый ре-чек «как сейчас сеть». Громко, быстро, без анонимности на стороне пробника. |
| Стандартная | 10 | 5.0 с | нет | Дефолт автора оригинала. Подходит для разовой диагностики и сохранения снапшота. |
| Тщательная | 5 | 10.0 с | да | Длинные таймауты + self-identify в User-Agent. Для отчёта и нестабильной сети, где быстрый скан выдаёт ложные таймауты. |
Дефолтный пресет выставляется в Настройках и применяется ко всем сканам из меню (кроме пункта «Быстрая проверка», который всегда использует Быструю — там это самый частый сценарий).
Кастомные списки сайтов
Кроме встроенных whitelist/blacklist из rkn-block-checker можно подсунуть свои — на свой регион, своего провайдера, на конкретные ресурсы, которые тебе важно мониторить.
Через интерфейс
Главное меню → Настройки → редакторы whitelist / blacklist.
Формат — по одной строке name=url. Пустые строки и #-комментарии игнорируются:
# Мои белые контрольные
google=https://google.com
wikipedia=https://wikipedia.org
# Мои чёрные на проверку
example-blocked=https://example-blocked.org
Правила:
- Имя — любая непустая строка без
= - URL — обязательно
http://илиhttps://, иначе строка отклоняется - Дубликаты имён внутри одного списка запрещены — TUI покажет ошибку и не сохранит
- Пустой редактор = «использовать встроенный список». Чтобы вернуть встроенный — просто очисти поле и сохрани
Сохранение — Ctrl+S или кнопка «Сохранить». Кнопка «Сбросить» возвращает оба списка к встроенным.
Через файл конфигурации
Тот же эффект, но руками. Конфиг лежит в ~/.config/rkn-tui/config.json (или $XDG_CONFIG_HOME/rkn-tui/config.json):
{
"default_preset": "default",
"custom_white": {
"google": "https://google.com",
"wikipedia": "https://wikipedia.org"
},
"custom_black": {
"example-blocked": "https://example-blocked.org"
},
"recent_adhoc": []
}
null в custom_white / custom_black означает «использовать встроенный список».
При сломанном JSON TUI стартанёт с дефолтами и не упадёт — сломанный конфиг просто игнорируется.
Добавить свой пресет
Три встроенных пресета закрывают типовые сценарии, но если нужен ещё один — это правка одного файла.
Открой rkn_tui/presets.py и добавь новый Preset рядом с существующими:
PARANOID = Preset(
name="paranoid",
label="Параноидальная",
description="Один воркер, 30 секунд таймаут — для совсем гнилого канала.",
workers=1,
timeout=30.0,
identify=True,
no_self_info=False,
)
ALL: list[Preset] = [QUICK, DEFAULT, THOROUGH, PARANOID]
Параметры:
name— внутреннее имя (snake_case, ASCII). Это значение пишется в конфиг.label— что будет видно в радио-кнопке настроек.description— короткое объяснение, когда брать этот пресет.workers— параллелизм проб (1 = строго последовательно).timeout— таймаут одной пробы в секундах.identify— посылать лиUser-Agent: rkn-block-checker(полезно для прозрачности и обхода эвристик «подозрительный клиент»).no_self_info— пропустить ли запросget_self_infoпри сканировании.
Чтобы новый пресет принимался конфигом, дополни VALID_PRESETS в rkn_tui/storage.py:
VALID_PRESETS = {"quick", "default", "thorough", "paranoid"}
И добавь его в PRESETS_ORDER в rkn_tui/screens/settings.py, чтобы он появился в радио-группе:
PRESETS_ORDER = ("quick", "default", "thorough", "paranoid")
После установки в editable-режиме (pipx install --editable .) новый пресет подхватится со следующим запуском rkn-tui.
Вердикты — короткая шпаргалка
| Вердикт | Что произошло |
|---|---|
| OK | Сайт открылся без помех |
| Подмена DNS | Резолвер отдал не те IP, что DoH |
| Сброс TCP | На пути middlebox шлёт RST |
| DPI по SNI | TLS-рукопожатие обрывается — классический ТСПУ |
| Заглушка | HTTP 451 или маркеры провайдерских заглушек |
| Таймаут | Пакеты молча отбрасываются (низкая уверенность) |
| Не отвечает | Сайт лежит — это не про РКН |
Полное описание с разбором «почему так уверены» — внутри TUI: открой строку результата клавишей Enter.
Снапшоты и история
После любого скана s или кнопка «Сохранить снапшот» откроет ввод метки. Снапшот пишется в ~/.config/rkn-tui/snapshots/{YYYYMMDDTHHMMSS}-{slug}.json со всеми вердиктами и контекстом сети на момент скана.
В разделе История:
- Открыть — просмотреть снапшот как обычный результат (read-only, без повторного сохранения)
- Сравнить — выбрать второй снапшот; покажется diff с разделением на «Только в старом», «Изменилось», «Только в новом»
- Удалить — с подтверждением
Diff подсвечивает регрессии (было OK → стало заблокировано) и восстановления (наоборот).
Структура проекта
rkn_tui/
├── app.py # точка входа, загрузка конфига
├── presets.py # QUICK / DEFAULT / THOROUGH
├── engine.py # обёртка над rkn_checker.core
├── vpn_check.py # стартовая диагностика сети
├── verdicts.py # описания вердиктов на русском
├── storage.py # конфиг ~/.config/rkn-tui/config.json
├── snapshots.py # снапшоты и diff
├── styles.tcss # Catppuccin Mocha
└── screens/ # экраны Textual: splash, menu, scan, results, history, diff, settings, adhoc
Кредит
Probe-движок — rkn-block-checker (MIT) автора Dmitry Vinogradov. TUI и обёртка — отдельный проект, не аффилирован с автором оригинала.
Лицензия
MIT.
Release files for rkn-checker-tui 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rkn_checker_tui-1.0.1.tar.gz | 62.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rkn_checker_tui-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 124.8 kB
Release files / rkn_checker_tui-1.0.1.tar.gz
| Download URL | rkn_checker_tui-1.0.1.tar.gz |
|---|---|
| Size | 62.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
192fcce721bdb29331aac78f3cc65e00c0e27e4690440e6381b91338bf146df6
|
|
BLAKE2b-256 checksum How to use checksums |
0c1db8b255c476ad22fc84a4b50b451714cf09e847d268e2ee75821d6506896c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.11
|
Release files / rkn_checker_tui-1.0.1-py3-none-any.whl
| Download URL | rkn_checker_tui-1.0.1-py3-none-any.whl |
|---|---|
| Size | 62.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ef2d915168ea42c9a7e8cca84cd8b16e071cf8108a36bce3db4a1f4923018b3e
|
|
BLAKE2b-256 checksum How to use checksums |
fdfd17040fdc587e92d678a5922aea434a7f220dd405017ac04b1f5eee88e467
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.11
|