GoodbyeDPI

Anonymizers ★ Рекомендуемый v0.2.2 · 21.03.2022 не обновлялся >2 лет

Windows-утилита для обхода DPI — самый простой вход в тему: один exe, запустил и работает. Обрабатывает два типа DPI: Passive DPI (оптический сплиттер/зеркало порта) — блокирует HTTP Redirect и TCP RST-пакеты от провайдера; Active DPI — фрагментирует первый пакет TCP-соединения, добавляет пробел в HTTP-заголовки, изменяет Host на смешанный регистр, фрагментирует TLS ClientHello. Работает на уровне WinDivert (перехват пакетов в userspace без драйвера). Режимы 1–9 с нарастающей агрессивностью; -9 — самый совместимый с большинством РФ-провайдеров. Применяется автоматически ко всему трафику без настройки прокси.

v0.2.2
21.03.2022 current
Добавлен 24.06.2026 · Обновлён 24.06.2026 · Anonymizers
Установка
# Windows — скачать релиз
# https://github.com/ValdikSS/GoodbyeDPI/releases

# Запуск с режимом -9 (рекомендован для РФ)
goodbyedpi.exe -9

# Обход блокировок YouTube/Discord (пример)
goodbyedpi.exe -9 --dns-addr 77.88.8.8 --dns-port 1253 --dnsv6-addr 2a02:6b8::feed:0ff

# Linux-порт (отдельный проект)
git clone https://github.com/basil00/divert-tpws
переведено ИИ

GoodbyeDPI — Утилита для обхода анализа глубины пакетов

Это программное обеспечение предназначено для обхода систем глубокого анализа пакетов (DPI), которые используются во многих интернет-провайдерах и блокируют доступ к определенным веб-сайтам.

Оно работает с DPI, подключенным через оптический делитель или зеркалирование портов (Пассивный DPI), который не блокирует данные, а просто отвечает быстрее, чем запрошенное назначение, а также с Активным DPI, подключенным последовательно.

Требуется Windows 7, 8, 8.1, 10 или 11 с правами администратора.

Быстрый старт

Эти скрипты запускают GoodbyeDPI в рекомендуемом режиме с перенаправлением DNS-резолвера на DNS Яндекса на нестандартном порту (для предотвращения отравления DNS).
Если это работает — поздравляем! Вы можете использовать его как есть или настроить дальше.

Как использовать

Скачайте последнюю версию со страницы Releases и запустите.

Поддерживаемые аргументы

Чтобы получить информацию о вашей версии программы, используйте аргумент -h (--help) при запуске.

Использование: goodbyedpi.exe [ПАРАМЕТР...]
 -p          блокировать пассивный DPI
 -q          блокировать QUIC/HTTP3
 -r          заменять Host на hoSt
 -m          убирать пробел между заголовком host и его значением
 -s          смешивать регистр заголовков Host (test.com -> tEsT.cOm)
 -f <значение>  установить фрагментацию HTTP на значение
 -k <значение>  включить фрагментацию с поддержанием соединения (keep-alive) для HTTP и установить ее значение
 -n          не ждать подтверждения (ACK) для первого сегмента при включенном -k
 -e <значение>  установить фрагментацию HTTPS на значение
 -a          дополнительный пробел между Method и Request-URI (включает -s, может ломать сайты)
 -w          пытаться искать и разбирать HTTP-трафик на всех обрабатываемых портах (не только на порту 80)
 --port        <значение>    дополнительный TCP-порт для выполнения фрагментации (и HTTP-трюков с -w)
 --ip-id       <значение>    обрабатывать дополнительный IP ID (десятичный, отбрасывать перенаправления и TCP RSTs с этим ID).
                          Этот параметр можно указать несколько раз.
 --dns-addr    <значение>    перенаправлять UDP DNS-запросы на указанный IP-адрес (экспериментальный)
 --dns-port    <значение>    перенаправлять UDP DNS-запросы на указанный порт (по умолчанию 53)
 --dnsv6-addr  <значение>    перенаправлять UDPv6 DNS-запросы на указанный IPv6-адрес (экспериментальный)
 --dnsv6-port  <значение>    перенаправлять UDPv6 DNS-запросы на указанный порт (по умолчанию 53)
 --dns-verb               выводить подробные сообщения о перенаправлении DNS
 --blacklist   <txtfile>  выполнять трюки обхода только для имен хостов и поддоменов из
                          предоставленного текстового файла (HTTP Host/TLS SNI).
                          Этот параметр можно указать несколько раз.
 --allow-no-sni           выполнять обход, если TLS SNI не может быть обнаружен при включенном --blacklist.
 --frag-by-sni            если SNI обнаружен в пакете TLS, фрагментировать пакет непосредственно перед значением SNI.
 --set-ttl     <значение>  активировать режим фальшивого запроса и отправлять его с указанным значением TTL.
                          ОПАСНО! Может сломать веб-сайты непредсказуемым образом. Используйте с осторожностью (или с --blacklist).
 --auto-ttl    [a1-a2-m]  активировать режим фальшивого запроса, автоматически определять TTL и уменьшать
                          его на основе расстояния. Если расстояние короче a2, TTL уменьшается на a2.
                          Если оно длиннее, используется шкала (a1; a2) с расстоянием в качестве веса.
                          Если итоговый TTL больше m(ax), устанавливается m.
                          По умолчанию (если задано): --auto-ttl 1-4-10. Также устанавливает --min-ttl 3.
                          ОПАСНО! Может сломать веб-сайты непредсказуемым образом. Используйте с осторожностью (или с --blacklist).
 --min-ttl     <значение>    минимальная дистанция TTL (128/64 - TTL), для которой отправляется фальшивый запрос
                          в режимах --set-ttl и --auto-ttl.
 --wrong-chksum           активировать режим фальшивого запроса и отправлять его с неверной контрольной суммой TCP.
                          Может не работать в виртуальной машине или с некоторыми маршрутизаторами, но безопаснее, чем set-ttl.
 --wrong-seq              активировать режим фальшивого запроса и отправлять его с TCP SEQ/ACK из прошлого.
 --native-frag            фрагментировать (разбивать) пакеты, отправляя их в меньших пакетах, без
                          сжатия размера окна. Работает быстрее (не замедляет соединение)
                          и лучше.
 --reverse-frag           фрагментировать (разбивать) пакеты так же, как --native-frag, но отправлять их в
                          обратном порядке. Работает с веб-сайтами, которые не могут обработать сегментированный
                          HTTPS TLS ClientHello (поскольку они получают TCP-поток «объединенным»).
 --fake-from-hex <значение>  Загружать фальшивые пакеты для режима фальшивого запроса из HEX-значений (например, 1234abcDEF).
                          Этот параметр можно указать несколько раз, в этом случае каждый фальшивый пакет
                          будет отправлен на каждый запрос в порядке указания аргументов командной строки.
 --fake-with-sni <значение>  Генерировать фальшивые пакеты для режима фальшивого запроса с указанным доменным именем SNI.
                          Пакеты имитируют TLS ClientHello пакет Mozilla Firefox 130
                          (с генерированными случайным образом фальшивыми SessionID, ключевыми обменами и ECH grease).
                          Может быть указан несколько раз для нескольких фальшивых пакетов.
 --fake-gen <значение>       Генерировать случайно заполненные фальшивые пакеты для режима фальшивого запроса, количество их
                          (до 30).
 --fake-resend <значение>    Отправлять каждый фальшивый пакет указанное количество раз.
                          По умолчанию: 1 (отправлять каждый пакет один раз).
 --max-payload [значение]    пакеты с данными TCP-полезной нагрузки более [значение] не будут обрабатываться.
                          Используйте этот параметр для уменьшения использования ЦП, пропуская огромные объемы данных
                          (например, передачу файлов) в уже установленных сессиях.
                          Может пропустить обработку некоторых больших HTTP-запросов.
                          По умолчанию (если задано): --max-payload 1200.


Устаревшие наборы режимов:
 -1          -p -r -s -f 2 -k 2 -n -e 2 (наиболее совместимый режим)
 -2          -p -r -s -f 2 -k 2 -n -e 40 (лучшая скорость для HTTPS, но все еще совместимый)
 -3          -p -r -s -e 40 (лучшая скорость для HTTP и HTTPS)
 -4          -p -r -s (лучшая скорость)

Современные наборы режимов (более стабильные, более совместимые, быстрые):
 -5          -f 2 -e 2 --auto-ttl --reverse-frag --max-payload
 -6          -f 2 -e 2 --wrong-seq --reverse-frag --max-payload
 -7          -f 2 -e 2 --wrong-chksum --reverse-frag --max-payload
 -8          -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload
 -9          -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload -q (это режим по умолчанию)

 Примечание: комбинация --wrong-seq и --wrong-chksum генерирует два различных фальшивых пакета.

Как проверить

Чтобы проверить, можно ли обойти DPI вашего провайдера, сначала убедитесь, что ваш провайдер не отравляет ответы DNS, включив опцию «Безопасный DNS (DNS через HTTPS)» в вашем браузере.

Затем запустите исполняемый файл goodbyedpi.exe без каких-либо опций. Если это работает — поздравляем! Вы можете использовать его как есть или настроить дальше, например, используя опцию --blacklist, если список заблокированных веб-сайтов известен и доступен для вашей страны.

Если ваш провайдер перехватывает DNS-запросы, вы можете использовать опцию --dns-addr для публичного DNS-резолвера, работающего на нестандартном порту (например, DNS Яндекса 77.88.8.8:1253) или настроить DNS через HTTPS/TLS с помощью сторонних приложений.

Посмотрите скрипты .cmd и измените их в соответствии с вашими предпочтениями и условиями сети.

Как это работает

Пассивный DPI

Большинство Пассивных DPI отправляют HTTP 302 Redirect, если вы пытаетесь получить доступ к заблокированному веб-сайту через HTTP, и TCP Reset в случае с HTTPS, быстрее, чем целевой веб-сайт. Пакеты, отправляемые DPI, обычно имеют поле идентификации IP, равное 0x0000 или 0x0001, как видно у российских провайдеров. Эти пакеты, если они перенаправляют вас на другой веб-сайт (страница цензуры), блокируются GoodbyeDPI.

Активный DPI

Активный DPI обмануть сложнее. В настоящее время программное обеспечение использует 7 методов для обхода активного DPI:

  • Фрагментация на уровне TCP для первого пакета данных
  • Фрагментация на уровне TCP для постоянных (поддерживаемых) HTTP-сессий
  • Замена заголовка Host на hoSt
  • Удаление пробела между именем и значением заголовка в Host
  • Добавление дополнительного пробела между методом HTTP (GET, POST и т.д.) и URI
  • Смешивание регистра значения заголовка Host
  • Отправка поддельных HTTP/HTTPS-пакетов с низким значением Time-To-Live, неверной контрольной суммой или неверными номерами TCP Sequence/Acknowledgement для обмана DPI и предотвращения их доставки в пункт назначения

Эти методы не должны ломать работу какого-либо веб-сайта, поскольку они полностью совместимы со стандартами TCP и HTTP, однако их достаточно для предотвращения классификации данных DPI и обхода цензуры. Дополнительный пробел может сломать работу некоторых веб-сайтов, хотя это допустимо спецификацией HTTP/1.1 (см. 19.3 Tolerant Applications).

Программа загружает драйвер WinDivert, который использует платформу фильтрации Windows для установки фильтров и перенаправления пакетов в пользовательское пространство. Он работает, пока видно окно консоли, и завершается при закрытии окна.

Как собрать из исходного кода

Этот проект можно собрать с помощью GNU Make и mingw. Единственная зависимость — WinDivert.

Для сборки исполняемого файла x86 выполните:

make CPREFIX=i686-w64-mingw32- WINDIVERTHEADERS=/path/to/windivert/include WINDIVERTLIBS=/path/to/windivert/x86

А для x86_64:

make CPREFIX=x86_64-w64-mingw32- BIT64=1 WINDIVERTHEADERS=/path/to/windivert/include WINDIVERTLIBS=/path/to/windivert/amd64

Как установить как службу Windows

Смотрите примеры в скриптах service_install_russia_blacklist.cmd, service_install_russia_blacklist_dnsredir.cmd и service_remove.cmd.

Измените их в соответствии с вашими потребностями.

Известные проблемы

  • Устаревшие установки Windows 7 не могут загрузить драйвер WinDivert из-за отсутствия поддержки цифровых подписей SHA256. Установите KB3033929 x86/x64, а лучше обновите всю систему с помощью Центра обновления Windows.
  • Сетевые карты Intel/Qualcomm Killer: опция Advanced Stream Detect в Killer Control Center несовместима с GoodbyeDPI, отключите её.
  • Торговое программное обеспечение QUIK может конфликтовать с GoodbyeDPI. Сначала запустите QUIK, затем GoodbyeDPI.
  • ~~Некоторые стеки SSL/TLS не могут обрабатывать фрагментированные пакеты ClientHello, и HTTPS-веб-сайты не открываются. Ошибка: #4, #64.~~ Проблемы с фрагментацией исправлены в версии 0.1.7.
  • ~~Антивирус ESET несовместим с драйвером WinDivert #91. Вероятнее всего, это ошибка антивируса, а не WinDivert.~~

Похожие проекты

Благодарности

Спасибо @basil00 за WinDivert. Это основная часть этой программы.

Спасибо каждому участнику проекта BlockCheck. Было бы невозможно понять поведение DPI без этой утилиты.

Комментарии
Войдите, чтобы оставить комментарий