byedpi/readme.txt

110 lines
5.5 KiB
Plaintext
Raw Normal View History

2024-02-20 18:53:05 +00:00
Реализация некоторых способов запутывания DPI.
2024-02-28 18:33:27 +00:00
Программа представляет собой локальный SOCKS прокси сервер.
2024-02-20 18:53:05 +00:00
2024-02-28 18:33:27 +00:00
--------------
Использование:
2024-03-08 00:37:02 +00:00
$ ./ciadpi --disorder 3 -A --tlsrec 1+s
2024-02-20 18:53:05 +00:00
2024-02-28 18:33:27 +00:00
Описание аргументов:
2024-02-20 18:53:05 +00:00
-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
2024-03-08 00:37:02 +00:00
-A, --auto
Автоматический режим
Если обнаружены признаки блокировки (соединение разорвано сразу после первого пакета),
то будут применены параметры обхода, следующие за данной опцией
Можно указывать несколько групп параметров, раделяя их данным флагом
2024-03-08 18:33:25 +00:00
Если соединение успешно прошло, то параметры для данного IP будут закешированны
-u, --cache-ttl <sec>
Время жизни значения в кеше, указывается в секундах
2024-03-08 00:37:02 +00:00
-s, --split <n[+s]>
Разбить запрос по указанному смещению
После числа можно добавить флаг:
+s: добавить смещение SNI
+h: добавить смещение Host
2024-03-04 12:30:23 +00:00
Можно указывать несколько раз, чтобы разбить запрос по нескольким позициям
При указании отрицательного значения к нему прибавляется размер пакета
-d, --disorder <n[+s]>
Подобен --split, но части отправляются в обратном порядке
! Поведение в Windows отлично: сначала отправляется лишь часть, но затем целый запрос
-o, --oob <n[+s]>
2024-03-06 17:37:59 +00:00
Подобен --split, но после части отсылается один или несколько байт OOB данных
-f, --fake <n[+s]>
2024-03-04 12:30:23 +00:00
Подобен --disorder, только перед отправкой первого куска отправляется часть поддельного
Количество байт отправляемого из фейка равно рамеру разбиваемой части
2024-02-20 18:53:05 +00:00
-t, --ttl <num>
TTL для поддельного пакета, по умолчанию 8
Необходимо подобрать такое значение, чтобы пакет не дошел до сервера, но был обработан DPI
-l, --fake-tls <file>
-j, --fake-http <file>
2024-02-20 18:53:05 +00:00
Указать свои поддельные пакеты, вместо дефолтных
2024-02-29 17:07:59 +00:00
-e, --oob-data <file>
2024-02-29 17:18:23 +00:00
Данные, отсылаемые вне основного потока, по умолчанию один байт 'a'
! При размере более одного байта может работать нестабильно
2024-02-29 17:07:59 +00:00
2024-02-20 18:53:05 +00:00
-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 <n[+s]>
2024-02-20 18:53:05 +00:00
Разделить ClientHello на отдельные записи по указанному смещению
2024-03-04 12:30:23 +00:00
Можно указывать несколько раз
2024-02-20 18:53:05 +00:00
2024-02-28 18:33:27 +00:00
-------
Сборка:
Для сборки понадобится:
make, gcc/clang для Linux, mingw для Windows
# Linux
$ make
# Windows
$ make windows CC=x86_64-w64-mingw32-gcc
-----------------
Как это работает?
Подробно описано тут:
https://github.com/bol-van/zapret/blob/master/docs/readme.txt
https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf
https://habr.com/ru/post/335436