Дружелюбный TUI поверх rkn-block-checker: меню, пресеты, история, понятные описания вердиктов.
Project description
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rkn_checker_tui-1.0.0.tar.gz.
File metadata
- Download URL: rkn_checker_tui-1.0.0.tar.gz
- Upload date:
- Size: 56.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c40788a0b462feef278a1d4db7a6ea2f3c72437e45e28f0240172c2ee0e52a8a
|
|
| MD5 |
3ba9526ad8ac86670868e0f1cd71cfc9
|
|
| BLAKE2b-256 |
3d435a948f468070f1a061a0b08ac4df1bdeff555e70bffc7e4a33719bb2f873
|
File details
Details for the file rkn_checker_tui-1.0.0-py3-none-any.whl.
File metadata
- Download URL: rkn_checker_tui-1.0.0-py3-none-any.whl
- Upload date:
- Size: 56.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3623bf0adfff69241107ef273786e065b4ff847d8f8aad1154c2205d430ad201
|
|
| MD5 |
6e4a9356e3a2d7f2f88d01800e7bb8b5
|
|
| BLAKE2b-256 |
4bf1a0134e5f2e97d42762644ae9083158177e8c70aadd4d457642ae6b793b60
|