Implementation of some DPI bypass methods. The program is a local SOCKS proxy server.
Go to file
2024-02-27 18:34:02 +03:00
conev.c Replace perror calls, remove io from conev.c 2024-02-25 00:40:54 +03:00
conev.h Windows support 2024-02-18 23:20:52 +03:00
desync.c Replace perror calls, remove io from conev.c 2024-02-25 00:40:54 +03:00
desync.h --tlsrec 2024-02-18 17:19:11 +03:00
error.h Missing slash 2024-02-24 23:13:25 +03:00
main.c Create run func 2024-02-27 18:34:02 +03:00
Makefile Remove error.c 2024-02-19 12:51:34 +03:00
packets.c --split-at-host: cancel if host not found 2024-02-19 22:01:25 +03:00
packets.h Add missing include 2024-02-18 23:36:51 +03:00
params.h Move LOG to error.h 2024-02-24 20:44:54 +03:00
proxy.c Create run func 2024-02-27 18:34:02 +03:00
proxy.h Create run func 2024-02-27 18:34:02 +03:00
readme.txt Update readme.txt 2024-02-20 21:53:05 +03: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.
Программа представляет собой SOCKS прокси сервер, который не нуждается в повышенных привилегиях.

Пример использования:
$ ./ciadpi --method disorder --split-pos 3

Чуть более подробный текст "--help":
-i, --ip <ip>
    Прослушиваемый IP, по умолчанию 0.0.0.0

-p, --port <num>
    Прослушиваемый порт, по умолчанию 1080

-c, --max-conn <count>
    Максимальное количество клиентских подключений, по умолчанию 512

-I  --conn-ip <ip>
    Адрес, к которому будут привязаны исходящие соединения, по умолчанию ::
    При указании IPv4 адреса запросы на IPv6 будут отклоняться

-b, --buf-size <size>
    Максимальный размер данных, получаемых и отправляемых за один вызов recv/send
    Размер указывается в байтах, по умолчанию равен 16384

-g, --def-ttl <num>
    Значение TTL для всех исходящий соединений
    Может быть полезен для обхода обнаружения нестандартного/уменьшенного TTL

-N, --no-domain
    Отбрасывать запросы, если в качестве адреса указан домен
    Т.к. резолвинг выполняется синхронно, то он может замедлить или даже заморозить работу

-K, --desync-known
    Отключить запутывание для нераспознанных протоколов
    Распознаваемые протоколы: HTTP и TLS с SNI

-m, --method <s|d|f>
    Способ десинхронизации TCP, есть 3 метода, комбинировать их нельзя:
    split:
        Разбить первый запрос на два по определённому смещению
    disorder:
        Как split, но части отправляются в обратном порядке
        ! Поведение в Windows отлично: сначала отправляется вторая часть, затем целый запрос
    fake:
        ! В Windows не поддерживается
        Как disorder, только перед первым запросом отправляется часть поддельного
        Количество байт отправляемого из фейка равно значению split-pos,
        поэтому рекомендуется использовать отрицательное значение или вкл. split-at-host

-s, --split-pos <offset>
    Смещение, по которому будет разбит запрос, по умолчанию 3
    Если значение отрицательное, то оно будет считаться от конца

-H, --split-at-host
    Если найден SNI или Host, то считать смещение относительно позиции домена
    При split-pos=0 запрос будет разбит прямо перед именем хоста

-t, --ttl <num>
    TTL для поддельного пакета, по умолчанию 8
    Необходимо подобрать такое значение, чтобы пакет не дошел до сервера, но был обработан DPI

-l, --fake-tls <file>
-o, --fake-http <file>
    Указать свои поддельные пакеты, вместо дефолтных

-n, --tls-sni <str>
    Изменить SNI в fake пакете на указанный

-M, --mod-http <h[,d,r]>
    Всякие манипуляции с HTTP пакетом, можно комбинировать
    hcsmix:
        "Host: name" -> "hOsT: name"
    dcsmix:
        "Host: name" -> "Host: NaMe"
    rmspace:
        "Host: name" -> "Host:name\t"

-r, --tlsrec <offset>
    Разделить ClientHello на отдельные записи по указанному смещению
    Также возможен отсчет от конца при указании отрицательного значения

-L, --tlsrec-at-sni
    Отсчитывать позицию tlsrec относительно SNI