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 или прокси.
- Безопасность: Валидация протоколов и изоляция процессов захвата трафика.
Перед запуском скрипта нужно установить системные утилиты. Скрипт использует продвинутые инструменты для сортировки и математики, которых нет в стандартной прошивке 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
Предположим, мы будем хранить всё в папке /etc/nfqws/scripts.
-
Создайте файл скрипта: Сохраните файл скрипта dpi_checker.sh из Releases и переместите на нужное вам устройство любимым способом - к примеру, WinSCP для Windows.
-
Откройте Терминал и подключитесь к вашему устройству по SSH:
ssh root@IP.адрес.устройства -
Сделайте скрипт исполняемым:
chmod +x /etc/nfqws/scripts/dpi_checker.sh
Результаты дублируются в файл
/tmp/dpi_check_results.txt
Команда запуска:
/etc/nfqws/scripts/dpi_checker.sh /etc/nfqws/lists/suite.json
Результат выполнения выводится в консоль в реальном времени. На тестирование уходит 1-2 минуты, чтобы не перегружать устройство.
Файл должен содержать массив объектов. Пример структуры прикреплён в файле (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).
-
Тестирование стратегий обхода: Запустите скрипт без запущенного средства обхода, сохраните результат. Затем запустите
zapret/zapret2и прогоните скрипт снова. Сравните, исчезли ли статусыRST_DETECTED. -
Ложные срабатывания (CDN): Если вы видите
TOO_SMALLна динамических сайтах (где контент меняется), уменьшитеthresholdBytesв JSON для этого URL. -
Работа через Proxy/VPN: Скрипт работает с системной маршрутизацией самого роутера. Если вы хотите проверить конкретный интерфейс (например, VPN-туннель), убедитесь, что запускаете его на том же самом роутере, и маршруты до целевых IP идут через него. Скрипт автоматически определяет исходящий интерфейс для
tcpdump. -
Отладка: Если скрипт падает или ведет себя странно, в начале файла можно включить режим отладки bash, раскомментировав
set -x(но вывод будет очень объемным).
