|
Some checks failed
Tests / test (ubuntu-latest, 3.10) (push) Has been cancelled
Tests / test (ubuntu-latest, 3.11) (push) Has been cancelled
Tests / test (ubuntu-latest, 3.12) (push) Has been cancelled
Tests / test (ubuntu-latest, 3.13) (push) Has been cancelled
Tests / test (windows-latest, 3.10) (push) Has been cancelled
Tests / test (windows-latest, 3.11) (push) Has been cancelled
Tests / test (windows-latest, 3.12) (push) Has been cancelled
Tests / test (windows-latest, 3.13) (push) Has been cancelled
|
||
|---|---|---|
| .github/workflows | ||
| app | ||
| cli | ||
| core | ||
| images | ||
| tests | ||
| utils | ||
| .gitattributes | ||
| .gitignore | ||
| config.yml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| Dockerfile.web | ||
| domains.txt | ||
| dpi_detector.py | ||
| LICENSE | ||
| pyproject.toml | ||
| pytest.ini | ||
| README.md | ||
| requirements-dev.txt | ||
| requirements.txt | ||
| tcp16.json | ||
| whitelist_sni.txt | ||
"Маяк у гаснущего горизонта свободного интернета"
Сквозь цифровые сумерки. Смотритель маяка, Runni
🔍 DPI Detector
Инструмент для анализа цензуры трафика в России: обнаруживает и классифицирует блокировки сайтов, хостингов и CDN (TCP16-20 блокировки), а также подмену DNS-запросов провайдером.
Инструмент был полезен? Поставь ⭐ в качестве "спасибо"!
🕊️ Заглядывайте в наш телеграм чат
📥 Скачать / Download
| ОС / Платформа | Готовые сборки |
|---|---|
| 🪟 Windows |
|
| 🐧 Linux |
|
| 🍎 macOS |
|
| 📱 Android (Termux) | Инструкция |
| 📲 iOS (a-Shell) | Инструкция |
| 🐳 Docker | Инструкция |
🎯 Возможности
- TCP 16-20KB блокировка — обнаруживает обрыв соединения к CDN и хостингам после передачи 14-34KB
- Подбор белых SNI для AS хостингов/CDN
- Проверка доступности заблокированных сайтов — тестирует TLS 1.2, TLS 1.3 и HTTP
- Проверка DNS — выявляет перехват UDP/53, подмену IP-адресов заглушками и блокировку DoH/DoT
- Классификация ошибок — различает TCP RST, Connection Abort, Handshake/Read Timeout, TLS MITM, SNI-блокировку и другие
- Гибкая настройка — таймауты, свои списки доменов, DNS-серверы, выбор IPv4/IPv6 и конкурентности (1/5/20/50/100) прямо в меню
Warning
Если у вас запущены средства обхода блокировок (например, zapret или GoodbyeDPI), результаты тестов будут искажены. Чтобы узнать реальное состояние фильтров вашего провайдера, выключите их перед началом проверки или убедитесь, что они работают в режиме обработки всех пакетов (режим ALL), а не только по списку.
🐋 Docker
Быстрый старт
Docker проверит наличие обновлений и скачает свежую версию перед запуском
docker run --rm -it --pull=always ghcr.io/runnin4ik/dpi-detector:latest
Web-интерфейс
docker run -d --name dpi-detector-web -p 7681:7681 --restart unless-stopped ghcr.io/runnin4ik/dpi-detector:web
Откройте в браузере: http://<IP_сервера>:7681 или http://localhost:7681
🐍 Python 3.8+
Требования: httpx[socks,http2]>=0.28.1, rich>=14.3.2, PyYAML>=6.0.3
Установка:
# скачайте и распакуйте архив руками, или:
git clone https://github.com/Runnin4ik/dpi-detector.git
cd dpi-detector
python -m pip install -r requirements.txt
Запуск:
python dpi_detector.py
# или с параметрами
python dpi_detector.py -t 2 -d discord.com -p socks5://127.0.0.1:1080
🪟 Windows
Быстрое скачивание и запуск в PowerShell одной командой:
curl.exe -fL -o dpi_detector.exe https://github.com/Runnin4ik/dpi-detector/releases/download/v4.2.4/dpi_detector_v4.2.4_win10.exe; if ($LASTEXITCODE -eq 0) { .\dpi_detector.exe }
Либо скачайте .exe файл из таблицы выше и запустите двойным кликом.
🐧 Linux
Быстрое скачивание и запуск одной командой:
x86_64 (AMD / Intel):
curl -fsSLO https://github.com/Runnin4ik/dpi-detector/releases/download/v4.2.4/dpi_detector_v4.2.4_linux_x86_64 && chmod +x dpi_detector_v4.2.4_linux_x86_64 && ./dpi_detector_v4.2.4_linux_x86_64
ARM64 (Raspberry Pi 3–5, Orange Pi, ARM VPS):
curl -fsSLO https://github.com/Runnin4ik/dpi-detector/releases/download/v4.2.4/dpi_detector_v4.2.4_linux_arm64 && chmod +x dpi_detector_v4.2.4_linux_arm64 && ./dpi_detector_v4.2.4_linux_arm64
🍎 macOS
Быстрое скачивание и запуск одной командой (со снятием карантина):
Apple Silicon (M1–M4):
curl -fsSLO https://github.com/Runnin4ik/dpi-detector/releases/download/v4.2.4/dpi_detector_v4.2.4_macos_arm64 && chmod +x dpi_detector_v4.2.4_macos_arm64 && xattr -cr dpi_detector_v4.2.4_macos_arm64 && ./dpi_detector_v4.2.4_macos_arm64
Intel:
curl -fsSLO https://github.com/Runnin4ik/dpi-detector/releases/download/v4.2.4/dpi_detector_v4.2.4_macos_intel && chmod +x dpi_detector_v4.2.4_macos_intel && xattr -cr dpi_detector_v4.2.4_macos_intel && ./dpi_detector_v4.2.4_macos_intel
(Приложение не нотаризовано: xattr -cr снимает системный карантин macOS на запуск)
📲 iOS (a-Shell)
Для запуска требуется терминал a-Shell mini (App Store).
⚠️ Доступность в РФ: Приложение a-Shell mini может быть недоступно в App Store для РФ региона.
Установка и запуск
lg2 clone https://github.com/Runnin4ik/dpi-detector.git
cd dpi-detector.git
pip install -r requirements.txt
Теперь закройте приложение, переведите телефон в горизонтальный режим и откройте a-Shell заново.
python dpi_detector.py -t 123 --batch
⚠️ Интерактивный режим не работает в a-Shell — запускайте с параметрами: укажите нужные тесты через
-tи добавьте--batch.
📱 Android (Termux)
Для запуска требуется терминал Termux.
⚠️ Устанавливайте Termux только из F-Droid или GitHub Releases (версия из Google Play устарела и не поддерживается).
Установка и запуск
pkg update && pkg upgrade -y
(Если при обновлении спросит [default=N] — просто нажимайте Enter)
pkg install git python clang make -y
git clone https://github.com/Runnin4ik/dpi-detector.git && cd dpi-detector
pip install -r requirements.txt
Перед запустом переведите телефон в горизонтальный режим!
python dpi_detector.py
⚙️ Кастомизация
Вы можете переопределить стандартные файлы и списки:
domains.txt— список доменов для проверки доступности (HTTP, TLS 1.2, TLS 1.3).tcp16.json— цели и порты для теста TCP 16-20KB блокировок.config.yml— параметры конфигурации (таймауты, DoH-серверы и т.д.).whitelist_sni.txt— список белых SNI для подбора рабочих доменов.
- Для готовых сборок (.exe / Linux / macOS): скачайте нужные файлы из репозитория в папку рядом с исполняемым файлом и измените их.
- Для Docker: Запустите с монтированием (можно монтировать один или несколько файлов)
Команды монтирования для разных ОС (Нажмите чтобы открыть)
# Bash (Linux / macOS)
docker run --rm -it --pull=always \
-v $(pwd)/domains.txt:/app/domains.txt \
-v $(pwd)/tcp16.json:/app/tcp16.json \
-v $(pwd)/config.yml:/app/config.yml \
-v $(pwd)/whitelist_sni.txt:/app/whitelist_sni.txt \
ghcr.io/runnin4ik/dpi-detector:latest -t 123 -d discord.com
PowerShell (Windows)
docker run --rm -it --pull=always `
-v ${PWD}/domains.txt:/app/domains.txt `
-v ${PWD}/tcp16.json:/app/tcp16.json `
-v ${PWD}/config.yml:/app/config.yml `
-v ${PWD}/whitelist_sni.txt:/app/whitelist_sni.txt `
ghcr.io/runnin4ik/dpi-detector:latest
CMD (Windows)
docker run --rm -it --pull=always ^
-v %cd%/domains.txt:/app/domains.txt ^
-v %cd%/tcp16.json:/app/tcp16.json ^
-v %cd%/config.yml:/app/config.yml ^
-v %cd%/whitelist_sni.txt:/app/whitelist_sni.txt ^
ghcr.io/runnin4ik/dpi-detector:latest
Docker с Web интерфейсом:
docker run -d --name dpi-detector-web -p 7681:7681 \
-v $(pwd)/config.yml:/app/config.yml \
-v $(pwd)/domains.txt:/app/domains.txt \
-v $(pwd)/whitelist_sni.txt:/app/whitelist_sni.txt \
--restart unless-stopped \
ghcr.io/runnin4ik/dpi-detector:web
Либо через Docker Compose в скачанной папке проекта:
docker compose up -d
⚙️ Запуск с параметрами (CLI)
| Параметр | Описание | Пример использования |
|---|---|---|
-t, --tests |
Указать номера тестов (без меню). | -t 123 или -t 4 |
-p, --proxy |
Использовать прокси (переопределяет PROXY_URL). |
-p socks5://127.0.0.1:1080 |
-d, --domain |
Проверка отдельных доменов. Игнорирует domains.txt |
-d vk.com -d youtube.com |
-c, --concurrency |
Количество конкурентных запросов (переопределяет MAX_CONCURRENT). |
-c 50 |
-o, --output |
Автоматически сохранить лог в указанный файл. | -o report_log.txt |
--batch |
Отключает все вопросы и паузы в консоли. | --batch |
Параметры работают и для готовых бинарников (
.exe/ Linux / macOS) — они принимают те же флаги, что и запуск из исходниковpython dpi_detector.py.
Примеры запуска
Из исходников (Python)
python dpi_detector.py -t 0 --batch
Бинарник (любой)
./dpi_detector_v4.2.4_linux_x86_64 -t 0 --batch
Прокси: при заданном
PROXY_URL/-pвесь трафик всех тестов идёт через прокси, включая UDP-пробы теста 1 (через SOCKS5 UDP-relay; для HTTP-прокси UDP-релей невозможен — UDP-пробы идут напрямую). Для честного замера подмены своим провайдером запускайте без прокси.
🤝 Вклад в проект
Приветствуются Issue и Pull Request'ы и предложения функционала!
📜 Лицензия
MIT License — свободное использование, модификация и распространение.
⚠️ Дисклеймер
Этот инструмент предназначен исключительно для образовательных и диагностических целей. Автор не несет ответственности за использование данного ПО.
🙏 Благодарности
- Проекту hyperion-cs/dpi-checkers за вдохновение
- 0ka за помощь и консультации
👀Похожие проекты
Советуем также взглянуть:
- hyperion-cs/dpi-ch — DPI comprehensive checker (go)
💖 Поддержка проекта
Картой или по СБП
| Валюта | Сеть | Адрес |
|---|---|---|
| USDT | TRC20 | TGtcb4JMT5F3KiEL16oZnj9ijB2Pag1jCX |
| USDT | ERC20 | 0x97413028546b5da4cbba4d9838c9d635a5333ab1 |
| USDT | TON | UQApgV57_p0hQGBV9oxrDi7SvKqgN3pigw5YEA28VShrZ7X_ |
| TON | UQApgV57_p0hQGBV9oxrDi7SvKqgN3pigw5YEA28VShrZ7X_ |
|
| BNB | BEP-20 | 0x97413028546b5da4cbba4d9838c9d635a5333ab1 |
| SOL | 9obMiD8hYfs4D8XskQjHPPtAKYPq9CaEZTbBMxtCjQ3k |
|
| BTC | bc1q7579xpmxcrz34lzmrxfupkpcczvemeqk2e9f4h |
|
| ETH | 0x97413028546b5da4cbba4d9838c9d635a5333ab1 |
