Skip to main content

Дружелюбный TUI поверх rkn-block-checker: меню, пресеты, история, понятные описания вердиктов.

Project description

Python Textual Linux macOS License: MIT

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rkn_checker_tui-1.0.0.tar.gz (56.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rkn_checker_tui-1.0.0-py3-none-any.whl (56.8 kB view details)

Uploaded Python 3

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

Hashes for rkn_checker_tui-1.0.0.tar.gz
Algorithm Hash digest
SHA256 c40788a0b462feef278a1d4db7a6ea2f3c72437e45e28f0240172c2ee0e52a8a
MD5 3ba9526ad8ac86670868e0f1cd71cfc9
BLAKE2b-256 3d435a948f468070f1a061a0b08ac4df1bdeff555e70bffc7e4a33719bb2f873

See more details on using hashes here.

File details

Details for the file rkn_checker_tui-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for rkn_checker_tui-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3623bf0adfff69241107ef273786e065b4ff847d8f8aad1154c2205d430ad201
MD5 6e4a9356e3a2d7f2f88d01800e7bb8b5
BLAKE2b-256 4bf1a0134e5f2e97d42762644ae9083158177e8c70aadd4d457642ae6b793b60

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page