Update and rename readme.txt to README.md (#84)

Update and rename readme.txt to README.md
This commit is contained in:
vladiscripts 2024-08-14 11:09:56 +03:00 committed by GitHub
parent d61756dd95
commit 00ae8524f1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -2,12 +2,14 @@ Implementation of some DPI bypass methods.
The program is a local SOCKS proxy server. The program is a local SOCKS proxy server.
Usage example: Usage example:
```
ciadpi --disorder 1 --auto=torst --tlsrec 1+s ciadpi --disorder 1 --auto=torst --tlsrec 1+s
ciadpi --fake -1 --ttl 8 ciadpi --fake -1 --ttl 8
```
------ ------
### Описание аргументов ### Описание аргументов
```
-i, --ip <ip> -i, --ip <ip>
Прослушиваемый IP, по умолчанию 0.0.0.0 Прослушиваемый IP, по умолчанию 0.0.0.0
@ -17,7 +19,7 @@ ciadpi --fake -1 --ttl 8
-c, --max-conn <count> -c, --max-conn <count>
Максимальное количество клиентских подключений, по умолчанию 512 Максимальное количество клиентских подключений, по умолчанию 512
-I --conn-ip <ip> -I, --conn-ip <ip>
Адрес, к которому будут привязаны исходящие соединения, по умолчанию :: Адрес, к которому будут привязаны исходящие соединения, по умолчанию ::
При указании IPv4 адреса запросы на IPv6 будут отклоняться При указании IPv4 адреса запросы на IPv6 будут отклоняться
@ -129,123 +131,143 @@ ciadpi --fake -1 --ttl 8
-a, --udp-fake <count> -a, --udp-fake <count>
Количество фейковых UDP пакетов Количество фейковых UDP пакетов
```
### Подробнее
------ ------
--split ### Подробнее
`--split`
Разбивает запрос на части. Пример на запросе в 30 байт: Разбивает запрос на части. Пример на запросе в 30 байт:
- Параметры: --split 3 --split 7 - Параметры: `--split 3 --split 7`
- Порядок отправки: 1-3, 3-7, 7-30 - Порядок отправки: 1-3, 3-7, 7-30
------ ------
--disorder `--disorder`
Часть, попадающая под disorder, будет отправлена с TTL=1, т.е. фактически не будет никуда доставлена. Часть, попадающая под disorder, будет отправлена с TTL=1, т.е. фактически не будет никуда доставлена.
ОС узнает об этом лишь после отсылки последующей части, когда сервер сообщит о потере с помощью SACK. ОС узнает об этом лишь после отсылки последующей части, когда сервер сообщит о потере с помощью SACK.
Системе придется отослать предыдущий пакет заново, тем самым нарушив обычный порядок. Системе придется отослать предыдущий пакет заново, тем самым нарушив обычный порядок.
- Параметры: --disorder 7 - Параметры: `--disorder 7`
- Порядок отправки: 7-30, 1-7 - Порядок отправки: 7-30, 1-7
Вышесказанное распространяется только на Linux. Вышесказанное распространяется только на Linux.
В Windows выполняется полная ретрансмиссия: В Windows выполняется полная ретрансмиссия:
- Параметры: --disorder 7 - Параметры: `--disorder 7`
- Порядок отправки: 7-30, 1-30 - Порядок отправки: 7-30, 1-30
Поэтому желательно использовать ещё и split: Поэтому желательно использовать ещё и `split`:
- Параметры: --split 7 --disorder 23 - Параметры: `--split 7 --disorder 23`
- Порядок отправки: 1-7, 23-30, 7-30 - Порядок отправки: 1-7, 23-30, 7-30
На практике оптимально использовать: На практике оптимально использовать:
Linux: --disorder 1 * Linux: `--disorder 1`
Windows: --split 1+s --disorder 3+s * Windows: `--split 1+s --disorder 3+s`
------ ------
--fake `--fake`
- Параметры: --fake 7
- Параметры: `--fake 7`
- Порядок отправки: 1-7 фейк, 7-30 оригинал, 1-7 оригинал - Порядок отправки: 1-7 фейк, 7-30 оригинал, 1-7 оригинал
Данные в первой части запроса заменяются на поддельные. Данные в первой части запроса заменяются на поддельные.
Эта часть должна пройти через DPI, но не дойти до сервера. Эта часть должна пройти через DPI, но не дойти до сервера.
А раз часть не дойдет, то ОС отправит ее снова, тем самым изменив порядок подобно disorder. А раз часть не дойдет, то ОС отправит ее снова, тем самым изменив порядок подобно `disorder`.
Для того, чтобы фейк не дошел до сервера, есть опции ttl, ip-opt и md5sig. Для того, чтобы фейк не дошел до сервера, есть опции `ttl`, `ip-opt` и `md5sig`.
TTL необходимо подбирать такой, чтобы пакет прошел через все DPI, но не дошел до сервера. TTL необходимо подбирать такой, чтобы пакет прошел через все DPI, но не дошел до сервера.
Для Linux есть md5sig. Он устанавливает опцию TCP MD5 Signature, что не дает пакету быть принятым многими серверами. Для Linux есть md5sig. Он устанавливает опцию TCP MD5 Signature, что не дает пакету быть принятым многими серверами.
К сожалению, md5sig работает не во всех сборках. К сожалению, md5sig работает не во всех сборках.
Для Windows есть еще один способ избежать обработки фейка сервером. Для Windows есть еще один способ избежать обработки фейка сервером.
Это комбинирование fake с disorder: Это комбинирование `fake` с `disorder`:
- Параметры: --disorder 1 --fake 7 - Параметры: `--disorder 1 --fake 7`
- Порядок отправки: 2-7 фейк, 7-30 оригинал, 1-30 оригинал - Порядок отправки: 2-7 фейк, 7-30 оригинал, 1-30 оригинал
Если поддельный пакет и дойдет до сервера, то он будет перезаписан из-за полной ретрансмисси. Если поддельный пакет и дойдет до сервера, то он будет перезаписан из-за полной ретрансмисси.
На практике оптимально использовать: На практике оптимально использовать:
Linux: --fake -1 --md5sig * Linux: `--fake -1 --md5sig`
Windows: --disorder 1 --fake -1 * Windows: `--disorder 1 --fake -1`
------ ------
--oob `--oob`
TCP может отсылать данные вне основного потока, используя флаг URG, однако лишь 1 байт в пакете. TCP может отсылать данные вне основного потока, используя флаг URG, однако лишь 1 байт в пакете.
Все данные в таком пакете будут доставлены приложению, кроме последнего байта, который и является внеканальным: Все данные в таком пакете будут доставлены приложению, кроме последнего байта, который и является внеканальным:
- Параметры: --oob 3 - Параметры: `--oob 3`
- Отправка: 1-4 с флагом URG (1-3 данные запроса + 4-й байт, который будет усечен), 3-30 - Отправка: 1-4 с флагом URG (1-3 данные запроса + 4-й байт, который будет усечен), 3-30
Этот байт желательно помещать в SNI: --oob 3+s Этот байт желательно помещать в SNI: `--oob 3+s`
------ ------
--tlsrec `--tlsrec`
Одну TLS запись можно разбить на несколько, немного переделав заголовок. Одну TLS запись можно разбить на несколько, немного переделав заголовок.
На месте разбиения вставляется новый заголовок, увеличивая размер запроса на 5 байт. На месте разбиения вставляется новый заголовок, увеличивая размер запроса на 5 байт.
Этот заголовок можно поместить в середину SNI, не давая возможность DPI правильно его прочитать:
--tlsrec 3+s
Хоть tlsrec и oob запутывают DPI, они также могут запутать всякие мидлбоксы, Этот заголовок можно поместить в середину SNI, не давая возможность DPI правильно его прочитать:
которые не поддерживают полноценный стек TCP/TLS. `--tlsrec 3+s`
Из-за этого их следует использовать вместе с --auto:
--auto=torst --timeout 3 --tlsrec 3+s Хоть `tlsrec` и `oob` запутывают DPI, они также могут запутать всякие мидлбоксы, которые не поддерживают полноценный стек TCP/TLS.
В примере tlsrec будет применяться лишь в случаях, когда сброшено подключение или вышел таймаут, т.е. когда, скорее всего, произошла блокировка. Из-за этого их следует использовать вместе с `--auto`:
`--auto=torst --timeout 3 --tlsrec 3+s`
В примере `tlsrec` будет применяться лишь в случаях, когда сброшено подключение или вышел таймаут, т.е. когда, скорее всего, произошла блокировка.
Можно наоборот - отменять tlsrec, если сервер сбрасывает подключение или откидывает пакет: Можно наоборот - отменять tlsrec, если сервер сбрасывает подключение или откидывает пакет:
--tlsrec 3+s --auto=torst --timeout 3 `--tlsrec 3+s --auto=torst --timeout 3`
------ ------
--auto, --hosts `--auto`, `--hosts`
Параметр auto делит опции на группы.
Параметр `auto` делит опции на группы.
Для каждого запроса они обходятся слева на право. Для каждого запроса они обходятся слева на право.
Сначала проверяется триггер, указанный в auto, затем proto и hosts. Сначала проверяется триггер, указанный в `auto`, затем `proto` и `hosts`.
Можно указывать несколько групп опций, раделяя их данным параметром. Можно указывать несколько групп опций, раделяя их данным параметром.
Параметры, которые можно вынести в отдельную группу: Параметры, которые можно вынести в отдельную группу:
proto, hosts, pf, split, disorder, oob, fake, ttl, ip-opt, md5sig, fake-data, mod-http, tlsrec, udp-fake `proto, hosts, pf, split, disorder, oob, fake, ttl, ip-opt, md5sig, fake-data, mod-http, tlsrec, udp-fake`
Примеры: ------
#### Примеры:
```
--fake -1 --ttl 10 --auto=alert,sid_inv --fake -1 --ttl 5 --fake -1 --ttl 10 --auto=alert,sid_inv --fake -1 --ttl 5
По умолчанию использовать fake с ttl=10, в случае ошибки использовать fake с ttl=5 ```
По умолчанию использовать `fake` с ttl=10, в случае ошибки использовать `fake` с ttl=5
```
--hosts list.txt --disorder 3 --auto=none --hosts list.txt --disorder 3 --auto=none
```
Применять запутывание только для доменов из list.txt Применять запутывание только для доменов из list.txt
```
--hosts list.txt --auto=none --disorder 3 --hosts list.txt --auto=none --disorder 3
```
Не применять запутывание для доменов из list.txt Не применять запутывание для доменов из list.txt
```
--auto=torst --hosts list.txt --disorder 3 --auto=torst --hosts list.txt --disorder 3
```
По умолчанию ничего не делать, использовать disorder при условии, что произошла блокировка и домен входит в list.txt. По умолчанию ничего не делать, использовать disorder при условии, что произошла блокировка и домен входит в list.txt.
```
--proto=http,tls --disorder 3 --auto=none --proto=http,tls --disorder 3 --auto=none
```
Запутывать только HTTP и TLS Запутывать только HTTP и TLS
```
--proto=http --fake -1 --fake-data=':GET /...' --auto=none --fake -1 --proto=http --fake -1 --fake-data=':GET /...' --auto=none --fake -1
```
Переопределить фейковый пакет для HTTP Переопределить фейковый пакет для HTTP
------ ------
### Сборка ### Сборка
Для сборки понадобится: Для сборки понадобится:
make, gcc/clang для Linux, mingw для Windows `make`, `gcc/clang` для Linux, `mingw` для Windows
Linux: make * Linux: `make`
Windows: make windows CC=x86_64-w64-mingw32-gcc * Windows: `make windows CC=x86_64-w64-mingw32-gcc`
------ ------
### Дополнительная информация о DPI, источники идей ### Дополнительная информация о DPI, источники идей
https://github.com/bol-van/zapret/blob/master/docs/readme.txt * https://github.com/bol-van/zapret/blob/master/docs/readme.txt
https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf * https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf
https://habr.com/ru/post/335436 * https://habr.com/ru/post/335436