Implementation of some DPI bypass methods. The program is a local SOCKS proxy server.
Go to file
2023-07-12 09:15:43 +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 Save destination address 2023-07-12 09:15:43 +02:00
desync.h UDP desync: fake 2023-07-07 22:07:27 +02:00
main.c UDP desync: fake 2023-07-07 22:07:27 +02:00
Makefile usleep to nanosleep 2023-06-12 10:01:40 +02:00
packets.c UDP desync: fake 2023-07-07 22:07:27 +02:00
packets.h UDP desync: fake 2023-07-07 22:07:27 +02:00
params.h UDP desync: fake 2023-07-07 22:07:27 +02:00
proxy.c Save destination address 2023-07-12 09:15:43 +02:00
proxy.h UDP support 2023-07-06 20:21:44 +02:00
readme.txt Update readme.txt 2023-07-07 22:22:40 +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 прокси

Пример использования:
$ ./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
    Отбрасывать запросы если в качестве адреса указан домен
-U, --no-udp
    Не проксировать UDP
-K, --desync-known
    Отключить запутывание для нераспознанных протоколов (не HTTP или TLS)
-m, --method <s|d|f>
    Способ десинхронизации TCP, комбинировать нельзя
    split:
      Разбить первый запрос на два по указанному смещению
      Если смещение отрицательное, то считать относительно конца
      Реализация: два вызова send, с разными частями буфера
    disorder:
      Как split, но части отправляются в обратном порядке
      Реализация: устанавливаем TTL=1, отправляем первую часть, затем восстанавливаем значение TTL и отправляем вторую 
      (из-за низкого TTL первая часть не прибудет получателю и ОС выполнит ретрансмисию и снова отправит первую часть, но уже после второй)
    fake:
      Как disorder, только перед первым запросом отправляется поддельный такого же размера (т.е. равное значению split-pos)
      Реализация: тут используется возможность перезаписи данных после вызова 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>
-e, --fake-udp <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"
-u, --desync-udp <f>
    Способ десинхронизации UDP, реализован один метод - fake