Skip to content
This repository was archived by the owner on May 10, 2026. It is now read-only.

LordArrin/openwrt-dpi-checker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🕵️ OpenWrt DPI Checker

Bash-скрипт для детального анализа методов блокировок интернет-ресурсов (DPI). В отличие от простых ping или curl, этот инструмент коррелирует HTTP-ответы с анализом TCP-пакетов в реальном времени, позволяя точно определить, как именно провайдер ограничивает доступ. Разработан для тестирования непосредственно на роутере или файрволе - в зависимости от того, что стоит на страже вашей локальной сети, без помех от браузера или ОС.

🚀 Основные возможности

  • Детект TCP Reset (RST): Перехватывает и анализирует трафик через tcpdump во время запроса, выявляя принудительные сбросы соединения провайдером.
  • DNS Pinning: Жесткая привязка IP-адреса. Скрипт сначала резолвит домен, а затем заставляет curl идти строго на этот IP. Это исключает ошибки диагностики при использовании Round-Robin DNS или CDN (когда диагностика идет на один IP, а запрос улетает на другой).
  • Дифференциация блокировок: Различает:
    • RST_DETECTED (активное вмешательство DPI).
    • READ_TIMEOUT (шейпинг до 0, "зависание" сессии).
    • CONN_TIMEOUT (полная блокировка IP / Blackhole).
    • HTTP_ERROR (блокировка заглушкой провайдера).
  • Обход кэша: Автоматически добавляет уникальные timestamp-метки к запросам, чтобы исключить кэширование на стороне CDN или прокси.
  • Безопасность: Валидация протоколов и изоляция процессов захвата трафика.

🛠 Шаг 1. Установка необходимых компонентов

Перед запуском скрипта нужно установить системные утилиты. Скрипт использует продвинутые инструменты для сортировки и математики, которых нет в стандартной прошивке OpenWrt по умолчанию.

Зайдите в терминал устройства (SSH) и выполните команды:

OpenWrt 24.10 и более старые:

opkg update
opkg install curl grep sed ip-full gawk tcpdump-mini jq

OpenWrt 25.12 и новее, включая Snapshot:

apk --update-cache add curl grep sed ip-full gawk tcpdump-mini jq

📥 Шаг 2. Установка скрипта

Предположим, мы будем хранить всё в папке /etc/nfqws/scripts.

  1. Создайте файл скрипта: Сохраните файл скрипта dpi_checker.sh из Releases и переместите на нужное вам устройство любимым способом - к примеру, WinSCP для Windows.

  2. Откройте Терминал и подключитесь к вашему устройству по SSH:

    ssh root@IP.адрес.устройства
    
  3. Сделайте скрипт исполняемым:

    chmod +x /etc/nfqws/scripts/dpi_checker.sh

    Результаты дублируются в файл /tmp/dpi_check_results.txt


🚀 Шаг 3. Запуск

Команда запуска:

/etc/nfqws/scripts/dpi_checker.sh /etc/nfqws/lists/suite.json

Результат выполнения выводится в консоль в реальном времени. На тестирование уходит 1-2 минуты, чтобы не перегружать устройство.

📄 Формат файла целей (JSON)

Файл должен содержать массив объектов. Пример структуры прикреплён в файле (suite.json):

[
    { "id": "US.CF-01", "provider": "Cloudflare", "country": "🇺🇸", "thresholdBytes": 24576, "times": 1, "url": "https://img.wzstats.gg/cleaver/gunFullDisplay" },
    { "id": "US.CF-02", "provider": "Cloudflare", "country": "🇺🇸", "thresholdBytes": 104319, "times": 1, "url": "https://genshin.jmp.blue/characters/all#" },
    ...
    { "id": "NL.GCORE-01", "provider": "Gcore", "country": "🇳🇱", "thresholdBytes": 61816, "times": 1, "url": "https://bizora.kz/assets/index.CUgnHoYH.js" }
]

Формат файла, дефолтный файл с сайтами для тестирования, а так же общая идея скрипта принадлежит @hyperion-cs. Файл /suite.json имеет лицензию Apache-2.0.

Параметры:

  • id: Уникальный идентификатор теста (для логов).
  • provider: Имя провайдера/хостинга (для группировки в отчете).
  • url: Проверяемый ресурс (поддерживаются порты, например https://site.com:8443).
  • thresholdBytes: Минимальный ожидаемый размер файла в байтах. Если скачано меньше — считается ошибкой или блокировкой (полезно для отлова заглушек провайдера "Access Denied").
  • times: (Опционально) Сколько раз повторить тест для этого URL (по умолчанию 1).

Пример использования:

Screenshot #1


💡 Советы по использованию

  1. Тестирование стратегий обхода: Запустите скрипт без запущенного средства обхода, сохраните результат. Затем запустите zapret / zapret2 и прогоните скрипт снова. Сравните, исчезли ли статусы RST_DETECTED.

  2. Ложные срабатывания (CDN): Если вы видите TOO_SMALL на динамических сайтах (где контент меняется), уменьшите thresholdBytes в JSON для этого URL.

  3. Работа через Proxy/VPN: Скрипт работает с системной маршрутизацией самого роутера. Если вы хотите проверить конкретный интерфейс (например, VPN-туннель), убедитесь, что запускаете его на том же самом роутере, и маршруты до целевых IP идут через него. Скрипт автоматически определяет исходящий интерфейс для tcpdump.

  4. Отладка: Если скрипт падает или ведет себя странно, в начале файла можно включить режим отладки bash, раскомментировав set -x (но вывод будет очень объемным).

About

Консольный инструмент для проверки работы систем DPI на маршрутах интернет-провайдеров.

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages