ByeDPI

Спасибо большое за утилиту! А то у DPITunnel кривой HTTP-прокси, отчего не все сайты открываются с ним, а тут же привычный прокси SOCKS5/SOCKS4.

Мне хватает такой конфигурации:

/opt/ciadpi --method disorder --split-pos 3

Рад быть полезным

UDP associate over socks ?
Броузеры это поддерживают ?

насколько знаю - нет

Вышла новая версия - теперь сайты с IPv6 тоже открываются!

Новая версия!
Добавлена поддержка –tlsrec, а с ней появился и смысл поддержки Windows, которая также была добавлена.
Также были добавлены и удалены многие опции.

В windows имеет смысл все, что можно сделать в рамках stream (не packet) фильтра.
В т.ч. сплит и весь набор http дурилок. tlsrec, разумеется, тоже.
Packet filter уже реализован в goodbyeDPI, и без kernel драйвера его судя по всему не сделать
Кстати, tpws в режиме socks может работать под WSL

Конечно, однако до этого byedpi был неэффективен для tls, т.к. на многих провайдерах split не дает эффекта, disorder работает некорректно, а fake не поддерживается.

Новый метод обхода - внеполосные данные.
TCP позволяет отправить один байт данных вне основной полосы, и это можно использовать для запутывания. Например: разбить запрос по середине имени хоста и затем отослать случайный байт с флагом MSG_OOB. TCP пакет с этим байтом будет отличаться от других лишь приоритетом (seq и ack также увеличатся на 1), DPI посчитает его частью запроса и получит неверный SNI.

As discussed in Section 2, the TCP urgent mechanism simply permits a
point in the data stream to be designated as the end of urgent
information but does NOT provide a mechanism for sending “out-of-
band” data.

Unfortunately, virtually all TCP implementations process TCP urgent
indications differently. By default, the last byte of “urgent data”
is delivered “out of band” to the application. That is, it is not
delivered as part of the normal data stream [UNPv1]
( Stevens, W., “UNIX Network Programming, Volume 1.
Networking APIs: Sockets and XTI”, Prentice Hall PTR, 1997.).
For example,
the “out-of-band” byte is read by an application when a recv(2)
system call with the MSG_OOB flag set is issued.

Most implementations provide a socket option (SO_OOBINLINE) that
allows an application to override the (broken) default processing of
urgent indications, so that “urgent data” is delivered “in line” to
the application, thus providing the semantics intended by the IETF
specifications.

Поэтому DPI и может обработать пакет как обычные данные.

И поэтому один байт не будет обработан сервером, за некоторыми исключениями

Конечно, если сервер устанавливает опцию SO_OOBINLINE или флаг MSG_PEEK, принимая обычные данные, то все сломается.

Один байт отбросит, если делать это вручную и следить за отправкой, но семантически oob-данные являются данными. Попробуйте отправить несколько пакетов с urgent-флагом подряд — они объединятся в один сегмент и придут в приложение обычным потоком.

Хак, безусловно, прикольный, но не настолько универсальный, как может показаться на первый взгляд.

Да, поэтому можно отправлять настоящие данные с флагом oob, и все они придут в обычный поток, за исключением последнего байта:
1-я часть с флагом oob:
…“\nHost: rutx” (сервер отбросит x)
2-я часть:
racker.org”…

К таким исключениям можно отнести некоторые средства защиты от ддос, в частности заметил поломку на QRATOR

Залей скомпилированную версию под винду с obb

byedpi-6b484d5.zip (31,7 КБ)

Большое спасибо

техники OOB и tlsrec работают в России в основном только на TLS1.3
На 1.2 rdp-шный DPI сечет ответ сервера и сбрасывает

Новая версия!
Добавлена поддержка oob.
Методы запутывания были перенесены в отдельные опции.
Теперь их можно комбинировать, указывая свой метод для определенной позиции.
Позиций указывать можно сколько угодно, при этом можно добавить флаг смещения, например:
./ciadpi --disorder 3 --oob 1+sni --split -1+host --tlsrec 1 --tlsrec +sni

Теперь можно подкорректировать поведение disorder в Windows:
./ciadpi -s 3+s -d 20+s
Первый пакет будет содержать часть с первыми 3-мя байтами SNI
Второй - часть после SNI
Третий - SNI без первых 3-х байт и всю вторую часть