Implementation of some DPI bypass methods. The program is a local SOCKS proxy server.
Go to file
2023-07-07 15:26:04 +02:00
conev.c UDP support 2023-07-06 20:21:44 +02:00
conev.h UDP IPv6 2023-07-07 15:26:04 +02:00
desync.c set ttl and EAGAIN handler 2023-07-03 19:59:39 +02:00
desync.h init 2023-06-03 21:52:10 +02:00
main.c Delete transparent and HTTP proxy mode 2023-07-05 10:33:07 +02:00
Makefile usleep to nanosleep 2023-06-12 10:01:40 +02:00
packets.c init 2023-06-03 21:52:10 +02:00
packets.h init 2023-06-03 21:52:10 +02:00
params.h Delete transparent and HTTP proxy mode 2023-07-05 10:33:07 +02:00
proxy.c UDP IPv6 2023-07-07 15:26:04 +02:00
proxy.h UDP support 2023-07-06 20:21:44 +02:00
readme.txt Fix readme.txt 2023-06-14 18:29:56 +02:00

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Реализация некоторых способов запутывания DPI на Linux в виде SOCKS прокси

Сборка:
$ git clone https://github.com/hufrea/byedpi.git
$ cd byedpi
$ make
Использование:
$ ./ciadpi --method disorder --split-pos 3 --port 1080

Чуть более подробный текст "--help":
-i, --ip <ip>
    Прослушиваемый IP, по умолчанию 0.0.0.0    
-p, --port <num>          
    Прослушиваемый порт, по умолчанию 1080    
-D, --daemon
    Запуск в режиме демона 
-f, --pidfile <file>
    Записать PID в указанный файл    
-c, --max-conn <count>
    Максимальное количество клиентских подключений, по умолчанию 512    
-N, --no-domain
    Отбрасывать запросы если в качестве адреса указан домен
-K, --desync-known
    Отключить запутывание для нераспознанных протоколов (не HTTP или TLS)    
-m, --method <s|d|f>
    Способ десинхронизации, комбинировать нельзя
    split:
      Разбить первый запрос на два по указанному смещению
      Если смещение отрицательное, то считать относительно конца
      Реализация: два вызова send
    disorder:
      Как split, но части отправляются в обратном порядке
      Реализация: устанавливаем TTL=1, отправляем первую часть, затем восстанавливаем значение TTL и отправляем вторую 
      (из-за низкого TTL первая часть не прибудет получателю и ОС выполнит ретрансмисию и снова отправит первую часть, но уже после второй и с нормальным TTL)
    fake:
      Как disorder, только перед первым запросом отправляется поддельный такого же размера
      Реализация: тут используется возможность перезаписи данных после вызова sendfile -
      помещаем в буффер поддельные данные, вызываем sendfile с таким TTL, чтобы тот не дошел до сервера,
      затем перезаписываем данные оригинальными, восстанавливаем TTL и отправляем вторую часть с помощью send
-H, --split-at-host
    Если найден SNI или Host, то считать смещение относительно позиции домена
-t, --ttl <num>
    TTL для поддельного пакета, чтобы тот не дошел до сервера, но был обработан DPI, по умолчанию 8    
-l, --fake-tls <file>
-o, --fake-http <file>
    Указать свои поддельные пакеты, вместо дефолтных
-n, --tls-sni <str>
    В качестве поддельного пакета для TLS используется заранее записанный ClientHello,
    данный параметр модифицирует его, изменяя SNI на указанный
-M, --mod-http <h[,d,r]>
    Всякие манипуляции с HTTP пакетом, можно комбинировать
    hcsmix:
        "Host: name" -> "hOsT: name"
    dcsmix:
        "Host: name" -> "Host: NaMe"
    rmspace:
        "Host: name" -> "Host:name\t"