- Удалён тест 1 (подмена DNS): check_dns_integrity и эксклюзивные хелперы вырезаны; тесты перенумерованы 1-6 (доступность DNS, домены, TCP, белые SNI, Telegram, Легенда). - Тест DNS на глобальной DoH-правде: UDP-ответы сверяются с любым чистым DoH (Cloudflare/Google/Quad9), а не с DoH конкретного провайдера — судятся даже MSK-IX/НСДИ/dnsforge/Alibaba/DNSPod. - Отображение FakeIP (198.18.0.0/15): «Реальный резолвер» помечает ->FakeIP, «Подменяется?» magenta, отдельное предупреждение вместо ложного «перехвата», FakeIP исключён из hijack-логики и резолва Team Cymru. - Баннер до прогресса (заблокированные/незаблокированные домены + дисклеймер), предупреждение о перехвате после таблицы. - UDP-мин только по доверенным доменам (vk.ru, gosuslugi.ru); цвета подмены 0/5..5/5. - Фикс Telegram download: возвращён client.send(req, stream=True), pin_ipv4 только без PROXY_URL. - Удалён дублирующий блок меню в ask_test_selection; обновлена Легенда (UNKNOWN/READ TIMEOUT). - check_dependencies() перед запуском. - config.yml: убран www.fastmail.com из DNS_CHECK_DOMAINS (теперь 5 доменов). - README/.github workflow: ссылки и default version -> v3.7.0. |
||
|---|---|---|
| .github/workflows | ||
| cli | ||
| core | ||
| images | ||
| utils | ||
| .gitignore | ||
| config.yml | ||
| Dockerfile | ||
| domains.txt | ||
| dpi_detector.py | ||
| LICENSE | ||
| README.md | ||
| requirements.txt | ||
| tcp16.json | ||
| whitelist_sni.txt | ||
«Маяк у гаснущего горизонта свободного интернета»
Сквозь цифровые сумерки. Смотритель маяка, Runni
🔍 DPI Detector
Инструмент для анализа цензуры трафика в России: обнаруживает и классифицирует блокировки сайтов, хостингов и CDN (TCP16-20 блокировки), а также подмену DNS-запросов провайдером.
Инструмент был полезен? Поставь ⭐ в качестве «спасибо»!
🎯 Возможности
- TCP 16-20KB блокировка — обнаруживает обрыв соединения к CDN и хостингам после передачи 14-34KB
- Подбор белых SNI для AS хостингов/CDN
- Проверка доступности заблокированных сайтов — тестирует TLS 1.2, TLS 1.3 и HTTP
- Проверка DNS — выявляет перехват UDP/53, подмену IP-адресов заглушками и блокировку DoH
- Классификация ошибок — различает TCP RST, Connection Abort, Handshake/Read Timeout, TLS MITM, SNI-блокировку и другие
- Гибкая настройка — таймауты, потоки, свои списки доменов, DNS-серверы и IPv4-only режим
Warning
Если у вас запущены средства обхода блокировок (например, zapret или GoodbyeDPI), результаты тестов будут искажены. Чтобы узнать реальное состояние фильтров вашего провайдера, выключите их перед началом проверки или убедитесь, что они работают в режиме обработки всех пакетов (режим ALL), а не только по списку.
⚙️ Кастомизация
Следующие файлы могут быть переопределены. Инструкции ниже.
domains.txt— список доменов для проверки.tcp16.json— цели для теста TCP 16-20KB.config.yml— конфигурация.whitelist_sni.txt— список белых SNI для подбора рабочих
⚙️ Запуск с параметрами (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 |
🐋 Docker (Рекомендовано)
Быстрый старт
Docker проверит наличие обновлений и скачает свежую версию перед запуском
docker run --rm -it --pull=always ghcr.io/runnin4ik/dpi-detector:latest
Или запускайте с указанием определенной версии
Это избавляет от постоянных скачиваний, но нужно следить за актуальностью версий
docker run --rm -it ghcr.io/runnin4ik/dpi-detector:3.7.0
С кастомизацией
Переопределите нужные файлы: domains.txt, tcp16.json...
Запустите с монтированием (можно монтировать один или несколько файлов)
# 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 и CMD
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
🐍 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 (Готовые сборки)
Для использования программы не обязательно устанавливать Python. Скачайте подходящий .exe файл в разделе Releases -> Assets:
С кастомизацией
Переопределите нужные файлы: domains.txt, tcp16.json, config.yml, whitelist_sni.txt
И положите их в папку рядом с .exe файлом.
🍎 macOS (Экспериментально)
Готовые сборки для macOS появились недавно и экспериментальны — протестированы не на всех конфигурациях. Буду благодарен за фидбек в Issue.
Скачайте подходящий бинарник в разделе Releases -> Assets:
Запуск
Приложение не нотаризовано, поэтому macOS заблокирует файл, скачанный через браузер. Один раз снимите карантин и запустите:
xattr -cr dpi_detector_v3.7.0_macos_arm64
chmod +x dpi_detector_v3.7.0_macos_arm64
./dpi_detector_v3.7.0_macos_arm64
Либо: Системные настройки → Конфиденциальность и безопасность → «Открыть в любом случае» (macOS Sequoia и новее), на старых версиях — ПКМ по файлу → Открыть.
С кастомизацией
Переопределите нужные файлы: domains.txt, tcp16.json, config.yml, whitelist_sni.txt
И положите их рядом с бинарником.
🤝 Вклад в проект
Приветствуются 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 |
