Template
1
0
mirror of https://github.com/bol-van/zapret2.git synced 2026-03-20 16:25:49 +00:00

update docs

This commit is contained in:
bol-van
2025-12-19 10:45:03 +03:00
parent 1b6b4c6b42
commit 3f760c778b

View File

@@ -1424,6 +1424,8 @@ function bitset(u32, bit_from, bit_to, set)
При операциях с числями без знака всегда важна разрядность. От нее зависит результат.
Поэтому все функции имеют в своем названии разрядность. При передаче аргументов, выходящих за пределы разрядности, вызывается error.
#### uX
```
function u8(raw_string, offset)
function u16(raw_string, offset)
@@ -1435,6 +1437,8 @@ function u32(raw_string, offset)
offset - номер байта от начала raw строки, начиная с 1.
Аналогичные встроенные средства (string.unpack) есть только в LUA 5.3.
#### buX
```
function bu8(u8)
function bu16(u16)
@@ -1445,11 +1449,15 @@ function bu32(u32)
Преобразуют число в raw строку в формате big endian.
Чтобы собрать структуру из числовых полей, можно использовать обычную операцию конкатенации строк `..`
#### swapX
```
function swap16(u16)
function swap32(u32)
```
#### uXadd
Инвертируют порядок следования байт в u16 или u32. Если в вашей структуре порядок байт little endian,
можно использовать uX/buX + swap.
@@ -1466,6 +1474,8 @@ function u32add(u32_1, u32_2, ...., u32_N)
### Целочисленное деление
#### divint
Встроенное целочисленное деление есть только в LUA 5.3+, где есть тип данных integer.
Чтобы не возиться с округлением, целочисленное деление реализовано C функцией :
@@ -1478,6 +1488,8 @@ function divint(dividend, divisor)
### Генерация случайных данных
#### brandom
Функции генерируют raw строку указанного размера , состоящую из случайных байт.
Случайные данные не являются криптографически стойкими.
```
@@ -1492,6 +1504,8 @@ function brandom_az09(size)
### Парсинг
#### parse_hex
```
function parse_hex(hex_string)
```
@@ -1508,18 +1522,24 @@ function parse_hex(hex_string)
nfqws2 не использует никакие криптобиблиотеки, но имеет минимальный набор криптографических операций для работы с некоторыми протоколами (QUIC).
Эти функции выставляются в LUA и могут использоваться для любых целей.
#### bcryptorandom
```
function bcryptorandom(size)
```
Генерирует raw строку - криптографически стойкий блок случайных данных указанного размера. Источник - `/dev/random`
#### hash
```
function hash(hash_type, data)
```
Возвращает raw строку - hash от блока данных - raw строки data. hash_type может быть "sha256" или "sha224".
#### aes
```
function aes(encrypt, key, data)
```
@@ -1531,6 +1551,8 @@ function aes(encrypt, key, data)
* возвращается raw строка 16 байт с результатом операции
* в случае неверных размеров key или data вызывается error
#### aes_gcm
```
function aes_gcm(encrypt, key, iv, data, associated_data)
```
@@ -1544,6 +1566,8 @@ function aes_gcm(encrypt, key, iv, data, associated_data)
* возвращается 2 значения : raw строка - блок шифрованных данных и raw строка atag (authentication tag). atag может быть передан вместе с шифрованным сообщением, iv и associated_data для проверки их целостности.
* в случае неверных размеров key или iv вызывается error
#### aes_ctr
```
function aes_ctr(key, iv, data)
```
@@ -1555,6 +1579,8 @@ function aes_ctr(key, iv, data)
* возвращается raw строка - блок шифрованных данных
* в случае неверных размеров key или iv вызывается error
#### hkdf
```
function hkdf(hash_type, salt, ikm, info, okm_len)
```
@@ -1571,6 +1597,8 @@ HKDF - HMAC-based Key Derivation Function. Генератор ключей на
### Системные функции
#### uname
```
function uname()
```
@@ -1578,6 +1606,7 @@ HKDF - HMAC-based Key Derivation Function. Генератор ключей на
Возвращает то же самое, что и команда uname в shell - название ядра ОС. "Linux", "FreeBSD", "OpenBSD".
В Windows возвращается строка, начинающаяся с "CYGWIN", далее следует версия.
#### clock_gettime
```
function clock_gettime()
@@ -1585,6 +1614,8 @@ HKDF - HMAC-based Key Derivation Function. Генератор ключей на
Узнать точное время. Возвращает 2 значения - unixtime в секундах и наносекунды. Встроенная функция `os.time()` не выдает наносекунды.
#### getpid
```
function getpid()
function gettid()
@@ -1599,6 +1630,8 @@ HKDF - HMAC-based Key Derivation Function. Генератор ключей на
В следующих функциях будут использоваться стандартные наборы опций - rawsend и reconstruct.
Они представляют собой таблицы со специфическими полями. Если nil, считается, что ни одно поле не задано.
#### standard reconstruct
Опции реконструкции диссектов - reconstruct_opts. Реконструкция - это сборка raw пакета из диссекта.
| Поле | Тип | Описание |
|:------|:----|:---------|
@@ -1622,6 +1655,8 @@ badsum вынесен в реконструкцию, поскольку чекс
Поэтому по отдельным частям гарантированно испортить чексумму невозможно.
Что бы вы туда не вписали, существует маленькая вероятность (1/65536), что она окажется верной.
#### standard rawsend
Опции отсылки raw пакетов - rawsend_opts
| Поле | Тип | Описание |
|:------|:----|:---------|
@@ -1646,6 +1681,8 @@ repeats шлют бинарно идентичный пакет указанно
Диссекция - процесс получения структурированного представления raw ip пакета.
Реконструкция - обратный процесс - получение raw ip из диссекта.
#### dissect
```
function dissect(raw_ip)
```
@@ -1654,6 +1691,8 @@ function dissect(raw_ip)
Это та же самая операция, что происходит автоматически до вызова desync функций по профилю.
Они получают уже готовый диссект.
#### reconstruct_dissect
```
function reconstruct_dissect(dissect, reconstruct_opts)
```
@@ -1673,6 +1712,8 @@ ip6.ip6_len должен быть рассчитан таким, каким он
Если C код видит признаки необходимости фрагментации, он проверяет корректность рассчитанных длин и смещений,
и если они корректны, после реконструкции сдвигает содержимое raw пакета в буфере реконструкции, чтобы получился фрагмент с нужными данными.
#### reconstruct_hdr
```
function reconstruct_tcphdr(tcp)
function reconstruct_udphdr(udp)
@@ -1685,6 +1726,8 @@ function reconstruct_ip6hdr(ip6, reconstruct_opts)
* чексумма ip header считается автоматически, поскольку ни от чего больше не зависит
* чексуммы tcp и udp не считаются, поскольку зависят от других компонент
#### csum_fix
```
function csum_ip4_fix(raw_ipv4_header)
function csum_tcp_fix(raw_ip_header, raw_tcp_header, payload)
@@ -1703,6 +1746,8 @@ csum_ip4_fix вам наверняка понадобится.
### Прием и отсылка пакетов
#### rawsend
```
function rawsend(raw_data, rawsend_opts)
function rawsend_dissect(dissect, rawsend_opts, reconstruct_opts)
@@ -1712,6 +1757,8 @@ function rawsend_dissect(dissect, rawsend_opts, reconstruct_opts)
* rawsend_dissect собирает пакет из диссекта и отправляет
* dissect представляет собой таблицу, описанную в соответствующем разделе
#### raw_packet
```
function raw_packet(ctx)
```
@@ -1722,7 +1769,7 @@ LUA функции получают готовый диссект текущег
### Работа с пейлоадами
Следующие функции позволяют искать по маркерам байтовые позиции внутри пейлоадов.
#### Маркеры
* **Абсолютный положительный маркер** - числовое смещение внутри пейлоада.
* **Абсолютный отрицательный маркер** - числовое смещение внутри пейлоада от следующего за концом байта. -1 указывает на последний байт.
@@ -1743,6 +1790,8 @@ LUA функции получают готовый диссект текущег
Пример списка маркеров : `100,midsld,sniext+1,endhost-2,-10`.
#### resolve_pos
Задача следующих функций - преобразовать маркеры в абсолютные позиции.
```
@@ -1759,6 +1808,8 @@ function resolve_range(blob,l7payload_type,marker_list[,strict,zero_based_pos])
### Управление выполнением инстансов
#### instance_cutoff
```
function instance_cutoff(ctx, outgoing)
```
@@ -1769,6 +1820,8 @@ function instance_cutoff(ctx, outgoing)
* outgoing = false - входящее направление
* outgoing = nil - оба направления
#### lua_cutoff
```
function lua_cutoff(ctx, outgoing)
```
@@ -1780,6 +1833,8 @@ function lua_cutoff(ctx, outgoing)
Состояние lua cutoff может случиться и естественным образом, если все инстансы превысили верхнюю границу
range или самоотсекли себя от направления.
#### execution_plan
```
function execution_plan(ctx)
```
@@ -1809,6 +1864,8 @@ function execution_plan(ctx)
| mode | string | режим счетчика - a, x, n, d, b, s, p |
| pos | number | значение счетчика |
#### execution_plan_cancel
```
function execution_plan_cancel(ctx)
```
@@ -1826,6 +1883,8 @@ function execution_plan_cancel(ctx)
Их можно в готовом виде использовать в `--lua-desync`.
### luaexec
```
function luaexec(ctx, desync)
```
@@ -1836,22 +1895,30 @@ function luaexec(ctx, desync)
Пример : `--lua-desync=luaexec:code="desync.rnd=brandom(math.random(5,10))"`
### pass
```
function pass(ctx, desync)
```
Ничего не делать, только вывести в debug log сообщение "pass".
### pktdebug
```
function pktdebug(ctx, desync)
```
Вывести структуру desync в debug log.
### argdebug
```
function argdebug(ctx, desync)
```
### posdebug
Вывести таблицу аргументов в debug log.
```
@@ -1860,6 +1927,8 @@ function posdebug(ctx, desync)
Вывести в debug log информацию о текущих conntrack позициях по прямому и обратному направлению.
### desync_orchestrator_example
```
function desync_orchestrator_example(ctx, desync)
```
@@ -1869,6 +1938,8 @@ function desync_orchestrator_example(ctx, desync)
## Служебные функции
### var_debug
```
function var_debug(v)
```
@@ -1876,6 +1947,8 @@ function var_debug(v)
Выводит в debug log информацию о параметре v - тип и значение.
Если это таблица, происходит рекурсивный проход по вложенным значениям и таблицам, информация представляется в виде дерева.
### deepcopy
```
function deepcopy(orig)
```
@@ -1892,6 +1965,8 @@ function deepcopy(orig)
Если новая строка будет иной по значению, и ее нет в пуле, будет создан новый элемент пула. Иначе будет присвоена ссылка
на существующий элемент.
### logical_xor
```
function logical_xor(a,b)
```
@@ -1900,10 +1975,14 @@ function logical_xor(a,b)
## Работа со строками
### in_list
```
function in_list(s, v)
```
### find_next_line
Включена ли строка v в список строк через запятую s. Например, `abc` включено в список `xyz,abc,12345`.
```
@@ -1915,6 +1994,8 @@ function find_next_line(s, pos)
## Обслуживание raw string
### hex
```
function string2hex(s)
function has_nonprintable(s)
@@ -1922,7 +2003,6 @@ function make_readable(s)
function str_or_hex(s)
function hexdump(s, max)
function hexdump_dlog(s)
function pattern(pat, offset, len)
```
* string2hex преобразует raw строку в символьное hex представление. байты разделены пробелами. "\xAB\xCD\x01\0x2" => "AB CD 01 02"
@@ -1931,7 +2011,16 @@ function pattern(pat, offset, len)
* str_or_hex возвращает саму строку, если has_nonpritable(s) = false, иначе string2hex(s)
* hexdump преобразует начальные байт raw строки s (до max байт) в hex строку + результат make_readable. Классический hex dump.
* hexdump_dlog выполняет hexdump и выводит результат в debug log
* pattern - это часть условно бесконечно повторяющейся raw строки pat, начинающаяся с позиции offset (нумерация с 1) и длиной len
### pattern
```
function pattern(pat, offset, len)
```
pattern - это часть условно бесконечно повторяющейся raw строки pat, начинающаяся с позиции offset (нумерация с 1) и длиной len
### blob
```
function blob(desync, name, def)
@@ -1987,6 +2076,8 @@ function pos_str(desync, pos)
Диссекция - это разбор некоторого сообщения для представления в структурированной форме.
### dissect_url
```
function dissect_url(url)
```
@@ -2009,6 +2100,9 @@ function dissect_url(url)
string /my_uri/script.php?a=1&b=3
</pre></details>
### dissect_nld
```
function dissect_nld(domain, level)
```
@@ -2016,6 +2110,8 @@ function dissect_nld(domain, level)
Получение домена уровня level из domain. level=2 'www.microsoft.com' => 'microsoft.com'.
Если уровня level нет, возвращается nil.
### dissect_http
```
function http_dissect_req(http)
function http_dissect_reply(http)
@@ -2098,12 +2194,16 @@ function http_dissect_reply(http)
## Работа с элементами L3 и L4 протоколов
### find_tcp_options
```
function find_tcp_option(options, kind)
```
Вернуть первый элемент dis.tcp.options с опцией kind. nil, если не найдено.
### ip6hdr
```
function find_ip6_exthdr(exthdr, proto)
```
@@ -2116,6 +2216,8 @@ function del_ip6_exthdr(ip6, idx)
function fix_ip6_next(ip6, last_proto)
```
### packet_len
Эти функции работают с диссектом ipv6 заголовка ip6 и его extension headers - ip6.exthdr.
При вставлении или удалении extension headers сохраняется корректная цепочка следующих протоколов, начиная с базового ipv6 заголовка.
* insert_ip6_exthdr вставляет extension header с протоколом header_type и данными data в диссект ip6 по индексу ip6.exthdr idx. Если idx=nil, вставляется в конец. Размер data должен быть 6+N*4 для IPPROTO_AH и 6+N*8 для остальных, иначе будут ошибки при реконструкции.
@@ -2148,6 +2250,8 @@ function packet_len(dis)
## Работа с именами хостов
### genhost
```
function genhost(len, template)
```
@@ -2167,6 +2271,8 @@ function genhost(len, template)
-- no template, len=10 : jgha7c.com
```
### host_ip
```
function host_ip(desync)
function host_or_ip(desync)
@@ -2213,6 +2319,8 @@ delta - это положительная или отрицательная ра
В следующих функция и функциях отсылки применяются стандартные блоки опций, представленных в виде полей отдельно передаваемой таблицы.
Таблицы опций имеет формат desync.arg. Может передаваться прямо desync.arg без изменений.
### standard ipid
**ipid_options**
| Поле | Описание |
|:------|:---------|
@@ -2224,6 +2332,8 @@ ip_id применяется только в ряде функций, оно н
Поскольку ОС не следит за измененными ip_id, в пакетах, которые не трогали, оно может начать идти заново.
Windows заменяет нулевые ip_id на собственную последовательность, остальные ОС - нет.
### standard fooling
**fooling_options**
| Поле | Описание |
|:------|:---------|
@@ -2255,6 +2365,8 @@ ipv6 extension headers добавляются в следующем порядк
5. destopt2
6. ah
### standard ipfrag
Опции IP фрагментации ipfrag_options содержат только два стандартных параметра. Остальное берут заменяемые функции фрагментаторы,
для которых существуют свои специфические опции.
@@ -2267,6 +2379,8 @@ ipv6 extension headers добавляются в следующем порядк
| ipfrag_pos_tcp | (фрагментатор ipfrag2) позиция фрагментации tcp. должна быть кратна 8, по умолчанию 32 |
| ipfrag_next | (фрагментатор ipfrag2) тип следующего протокола в "fragment" extension header второго фрагмента |
### apply_ip_id
```
function apply_ip_id(desync, dis, ipid_options, def)
```
@@ -2276,6 +2390,8 @@ function apply_ip_id(desync, dis, ipid_options, def)
Если ipid_options = nil, берется desync.arg.
def содержит режим назначения по умолчанию. Если nil, применяется "seq".
### apply_fooling
```
function apply_fooling(desync, dis, fooling_options)
```
@@ -2284,6 +2400,8 @@ function apply_fooling(desync, dis, fooling_options)
Если dis = nil, берется desync.dis.
Если fooling_options = nil, берется desync.arg
### ipfrag2
```
function ipfrag2(dis, ipfrag_options)
```
@@ -2304,6 +2422,8 @@ Unfragmentable part передается в каждом фрагменте с
ipfrag2 реализует эту возможность на двух фрагментах через указание параметра ipfrag_next.
Некоторые фаерволы пробиваются только большим количество фрагментов - для этого потребуется своя функция фрагментатор.
### wssize_rewrite
```
function wsize_rewrite(dis, arg)
```
@@ -2319,6 +2439,8 @@ function wsize_rewrite(dis, arg)
Следующие функции могут брать несколько блоков описанных выше опций, каждый из которых представлен полем параметра options.
Во всех функциях используется `options.reconstruct` и `options.rawsend`. Они соответствуют формату параметров C функции `rawsend_dissect`.
### rawsend_dissect_ipfrag
```
function rawsend_dissect_ipfrag(dis, options)
```
@@ -2326,6 +2448,8 @@ function rawsend_dissect_ipfrag(dis, options)
Использует кастомную функцию фрагментатор, если указано `options.ipfrag.ipfrag`.
Отсылает фрагменты в обратном порядке, если указано `options.ipfrag.ipfrag_disorder`.
### rawsend_dissect_segmented
```
function rawsend_dissect_segmented(desync, dis, mss, options)
```
@@ -2333,6 +2457,8 @@ function rawsend_dissect_segmented(desync, dis, mss, options)
Отправить диссект dis с автоматической tcp сегментацией на базе mss с применением `options.fooling` и `options.ipid`.
ipid применяется к каждому фрагменту. Для udp сегментация невозможна и не выполняется.
### rawsend_payload_segmented
```
function rawsend_payload_segmented(desync, payload, seq, options)
```
@@ -2404,6 +2530,8 @@ function replay_drop(desync)
По сухому описанию может быть сложно понять как работает оркестрация. Рекомендуется изучить код реальных оркестраторов,
а описанием пользоваться для уточнения смысла отдельных действий.
### instance_cutoff_shim(
```
function instance_cutoff_shim(ctx, desync, dir)
```
@@ -2411,18 +2539,24 @@ function instance_cutoff_shim(ctx, desync, dir)
Выполняет обычный instance cutoff по направлению dir, если ctx присутствует, иначе cutoff через дублирующий механизм,
состояние которого хранится в desync.track.lua_state. dir = true - исходящее направление, dir = false - входящее, dir = nil - оба направления.
### cutoff_shim_check
```
function cutoff_shim_check(desync)
```
Проверяет состояние instance cutoff для desync.func_instance по направлению desync.outgoing.
### apply_arg_prefix
```
function apply_arg_prefix(desync)
```
Выполняет подстановку значений аргументов из desync.arg, начинающихся с `%` и `#`.
### apply_execution_plan
```
function apply_execution_plan(desync, instance)
```
@@ -2431,18 +2565,24 @@ function apply_execution_plan(desync, instance)
тем самым воссоздает состояние desync, как если бы `instance` был вызван напрямую C кодом.
execution plan выдается C функцией `execution_plan()` как массив, элементами которого являются `instance`.
### verdict_aggregate
```
function verdict_aggregate(v1, v2)
```
Аггрегация вердиктов v1 и v2. VERDICT_MODIFY замещает VERDICT_PASS, VERDICT_DROP замещает их обоих.
### plan_instance_execute
```
function plan_instance_execute(desync, verdict, instance)
```
Выполняет элемент execution plan `instance` с учетом текущего вердикта verdict.
Возвращает аггрегацию текущего вердикта и вердикта `instance`.
Выполняет элемент execution plan `instance` с учетом instance cutoff и стандартных фильтров payload и range.
Возвращает аггрегацию verdict и вердикта `instance`.
### plan_instance_pop
```
function plan_instance_pop(desync)
@@ -2450,12 +2590,16 @@ function plan_instance_pop(desync)
Берет, удаляет и возвращает первый элемент execution plan из desync.plan. Если элементов нет - возвращает nil.
### plan_clear
```
function plan_clear(desync)
```
Очищает execution plan в desync.plan - удаляет все `instance`.
### orchestrate
```
function orchestrate(ctx, desync)
```
@@ -2463,6 +2607,8 @@ function orchestrate(ctx, desync)
Если оркестратор - первый, т.е. присутствует ctx, забирает execution plan и помещает его в desync.plan, а потом выполняет `execution_plan_cancel()`.
Если ctx=nil - не делает ничего. Считается, что план уже находится в desync.plan.
### replay_execution_plan
```
function replay_execution_plan(desync)
```
@@ -2482,6 +2628,9 @@ function replay_execution_plan(desync)
nfqws2 ничего не знает о том, что нужно `--lua-desync` функциям. Поэтому фильтрация направления и типа пейлоадов ложится целиком на вас. По умолчанию стоит запрет только на входящие, потому что они используются редко, а пользователь может не написать ограничение, и все это пойдет на LUA функции и будет напрасно грузить процессор гигабайтами скачиваемого трафика.
### standard direction
Фильтр по направлению. В большинстве функций, использующих фильтр по направлению, значение по умолчанию - "out", но есть и те, где по умолчанию "any". Фильтр по направлению можно реализовать и средствами C кода `--in-range` и `--out-range`.
**standard direction**
@@ -2489,6 +2638,8 @@ nfqws2 ничего не знает о том, что нужно `--lua-desync`
|:------|:---------|
| dir | in - входящее направление<br> out - исходящее направление<br>any - любое направление |
### standard payload
Фильтр по пейлоаду берет список типов пейлоада. Список известных типов пейлоада можно получить из help текста nfqws2. Все пустые пакеты имеют пейлоад empty, неизвестные - unknown. Особые значения - all и known. all означает любой пейлоад, known - не unknown и не empty.
**standard payload**
@@ -2499,79 +2650,93 @@ nfqws2 ничего не знает о том, что нужно `--lua-desync`
Применяются так же наборы опций
* [standard ipfrag](#операции-с-диссектами)
* [standard ipid](#операции-с-диссектами)
* [standard fooling](#операции-с-диссектами)
* [standard reconstruct](#опции-по-работе-с-пакетами)
* [standard rawsend](#опции-по-работе-с-пакетами)
* [standard ipfrag](#standard-ipfrag)
* [standard ipid](#standard-ipid)
* [standard fooling](#standard-fooling)
* [standard reconstruct](#standard-reconstruct)
* [standard rawsend](#standard-rawsend)
## Базовые функции
### drop
```
function drop(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard direction](#standard-direction)
* arg: [standard payload](#standard-payload)
* По умолчанию payload=all, direction=any, то есть drop всего.
Выносит VERDICT_DROP при выполнении условий фильтра.
### send
```
function send(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard ipfrag](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: [standard direction](#standard-direction)
* arg: [standard fooling](#standard-fooling)
* arg: [standard ipid](#standard-ipid)
* arg: [standard ipfrag](#standard-ipfrag)
* arg: [standard reconstruct](#standard-reconstruct)
* arg: [standard rawsend](#standard-rawsend)
* режим ip_id по умолчанию - none
Отсылает текущий диссект c опциональным применением модификаций.
### pktmod
```
function pktmod(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard direction](#standard-direction)
* arg: [standard fooling](#standard-fooling)
* arg: [standard ipid](#standard-ipid)
Применить модификации к текущему диссекту без отправки и вынесения вердикта.
## Дурение http
### http_hostcase
```
function http_hostcase(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard direction](#standard-direction)
* arg: spell - точное написание заголовка. по умолчанию "host"
Заменяет регистр http заголовка `Host:`
### http_domcase
```
function http_domcase(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard direction](#standard-direction)
Меняет регистр написания домена внутри заголовка `Host:`. Верхний и нижний регистр чредуется каждый символ : `rUtRaCkEr.oRg`.
### http_methodeol
```
function http_methodeol(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard direction](#standard-direction)
Вставляет '\r\n' перед методом, отрезая 2 последних символа из содержимого заголовка `User-Agent:`. Работает только на nginx, остальные сервера ломает.
## Замена window size
### wsize
```
function wsize(ctx, desync)
```
@@ -2583,11 +2748,13 @@ function wsize(ctx, desync)
Цель техники - подменить window size со стороны клиента или сервера, чтобы в ответ на это клиент отослал следующий пакет частями, поскольку целиком он не влезает в window size. Может приводить к замедлению. Устаревшая техника, рекомендуется применять только с сервера в крайнем случае для работы по клиентам, которые не делают ничего для обхода блокировки. С клиента лучше применять техники tcp сегментации, поскольку они лишены побочных эффектов в виде замедления скорости и имеют больше возможностей.
### wssize
```
function wssize(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard direction](#standard-direction)
* arg: wsize - размер tcp окна
* arg: scale - scaling фактор. заменяется в tcp option, если есть. только уменьшение, увеличение блокируется
* arg: forced_cutoff - список типов пейлоадов через зяпятую, при получении которых выполняется instance cutoff. Если нужно применять wssize бесконечно, можно указать forced_cutoff=no, то есть несуществующий тип пейлоада, который не придет никогда.
@@ -2616,14 +2783,16 @@ function wssize(ctx, desync)
иначе это поломает соединение. Без фулинга фейк должен повторять часть оригинальной информации, чтобы сервер не получил ложную информацию.
Скрытые фейки не воспринимаются сервером в силу характеристик пакетов, частью которых они являются.
### syndata
```
function syndata(ctx, desync)
```
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipfrag](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: [standard fooling](#standard-fooling)
* arg: [standard ipfrag](#standard-ipfrag)
* arg: [standard reconstruct](#standard-reconstruct)
* arg: [standard rawsend](#standard-rawsend)
* arg: blob - blob, содержащий фейковый payload. Должен помещаться в один пакет, сегментация невозможна.
* arg: tls_mod - применить указанный tls_mod к пейлоаду blob
@@ -2632,34 +2801,38 @@ function syndata(ctx, desync)
Таким образом воздействие выполняется на все ретрансмиссии SYN, после чего функция прекращает работу.
Является стратегией нулевой фазы, которая работает с хостлистами только в режиме `--ipcache-hostname`.
### fake
```
function fake(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard ipfrag](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: [standard direction](#standard-direction)
* arg: [standard payload](#standard-payload)
* arg: [standard fooling](#standard-fooling)
* arg: [standard ipid](#standard-ipid)
* arg: [standard ipfrag](#standard-ipfrag)
* arg: [standard reconstruct](#standard-reconstruct)
* arg: [standard rawsend](#standard-rawsend)
* arg: blob - blob, содержащий фейковый payload. Может быть любой длины - сегментация выполняется автоматически.
* arg: tls_mod - применить указанный tls_mod к пейлоаду blob
* payload фильтр по умолчанию - "known"
Это прямой фейк - отдельный пакет или группа пакетов. Функция не выносит вердикт и не блокирует отправку оригинала.
### rst
```
function rst(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard ipfrag](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: [standard direction](#standard-direction)
* arg: [standard payload](#standard-payload)
* arg: [standard fooling](#standard-fooling)
* arg: [standard ipid](#standard-ipid)
* arg: [standard ipfrag](#standard-ipfrag)
* arg: [standard reconstruct](#standard-reconstruct)
* arg: [standard rawsend](#standard-rawsend)
* arg: rstack - отсылка RST,ACK вместо RST
* payload фильтр по умолчанию - "known"
@@ -2667,17 +2840,19 @@ function rst(ctx, desync)
## TCP сегментация
### multisplit
```
function multisplit(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard ipfrag](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: [standard direction](#standard-direction)
* arg: [standard payload](#standard-payload)
* arg: [standard fooling](#standard-fooling)
* arg: [standard ipid](#standard-ipid)
* arg: [standard ipfrag](#standard-ipfrag)
* arg: [standard reconstruct](#standard-reconstruct)
* arg: [standard rawsend](#standard-rawsend)
* arg: pos - список через запятую позиционных маркеров - точек разреза. По умолчанию "2".
* arg: seqovl - число - смещение относительно текущего sequence для создания дополнительной части сегмента, выходящей влево за границу tcp window
* arg: seqovl_pattern - blob, используемый для заполнения seqovl. По умолчанию 0x00
@@ -2700,18 +2875,19 @@ seqovl - это фактически средство замешивания ф
Особое преимущество seqovl - в отсутствии необходимости фулинга. Сервер принимает только часть сегмента за счет игры с sequence numbers, а не за счет модификации каких-то элементов ip и tcp заголовков, что привело бы к полному непринятию.
### multidisorder
```
function multidisorder(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard ipfrag](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: [standard direction](#standard-direction)
* arg: [standard payload](#standard-payload)
* arg: [standard fooling](#standard-fooling)
* arg: [standard ipid](#standard-ipid)
* arg: [standard ipfrag](#standard-ipfrag)
* arg: [standard reconstruct](#standard-reconstruct)
* arg: [standard rawsend](#standard-rawsend)
* arg: pos - список через запятую позиционных маркеров - точек разреза. По умолчанию "2".
* arg: seqovl - маркер - смещение относительно текущего sequence для создания дополнительной части сегмента, выходящей влево
* arg: seqovl_pattern - blob, используемый для заполнения seqovl. По умолчанию 0x00
@@ -2729,17 +2905,18 @@ function multidisorder(ctx, desync)
Последний отсылаемый сегмент (1-й в оригинальной очередности) отправляется неизменным, переписывая в буфере сокета ложные данные из seqovl_pattern реальными. Восстанавливается непрерывная последовательность потока, данные передаются в сокет приложения.
### fakedsplit
```
function fakedsplit(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: [standard direction](#standard-direction)
* arg: [standard payload](#standard-payload)
* arg: [standard fooling](#standard-fooling)
* arg: [standard ipid](#standard-ipid)
* arg: [standard reconstruct](#standard-reconstruct)
* arg: [standard rawsend](#standard-rawsend)
* arg: pos - один позиционный маркер - точка разреза. По умолчанию "2".
* arg: seqovl - число - смещение относительно текущего sequence для создания дополнительной части сегмента, выходящей влево за границу tcp window
* arg: seqovl_pattern - blob, используемый для заполнения seqovl. По умолчанию 0x00
@@ -2770,16 +2947,18 @@ function fakedsplit(ctx, desync)
В случае успеха отсылки выносится VERDICT_DROP, если не указано "nodrop".
blob позволяет заменить текущией пейлоад на произвольный блоб, и тем самым отослать любой совместимый пейлоад с тем же разбиением.
### fakeddisorder
```
function fakeddisorder(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: [standard direction](#standard-direction)
* arg: [standard payload](#standard-payload)
* arg: [standard fooling](#standard-fooling)
* arg: [standard ipid](#standard-ipid)
* arg: [standard reconstruct](#standard-reconstruct)
* arg: [standard rawsend](#standard-rawsend)
* arg: pos - один позиционный маркер - точка разреза. По умолчанию "2".
* arg: seqovl - маркер - смещение относительно текущего sequence для создания дополнительной части сегмента, выходящей влево
* arg: seqovl_pattern - blob, используемый для заполнения seqovl. По умолчанию 0x00
@@ -2810,16 +2989,18 @@ function fakeddisorder(ctx, desync)
В случае успеха отсылки выносится VERDICT_DROP, если не указано "nodrop".
blob позволяет заменить текущией пейлоад на произвольный блоб, и тем самым отослать любой совместимый пейлоад с тем же разбиением.
### hostfakesplit
```
function hostfakesplit(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: [standard direction](#standard-direction)
* arg: [standard payload](#standard-payload)
* arg: [standard fooling](#standard-fooling)
* arg: [standard ipid](#standard-ipid)
* arg: [standard reconstruct](#standard-reconstruct)
* arg: [standard rawsend](#standard-rawsend)
* arg: host - шаблон для генерации фейкового хоста - random.template
* arg: midhost - маркер для дополнительного разреза сегмента с реальным хостом
* arg: disorder_after - маркер для дополнительного разреза заключительной реальной части и отправки сегментов в обратном порядке
@@ -2847,17 +3028,19 @@ function hostfakesplit(ctx, desync)
В случае успеха отсылки выносится VERDICT_DROP, если не указано "nodrop".
blob позволяет заменить текущией пейлоад на произвольный блоб, и тем самым отослать любой совместимый пейлоад с тем же разбиением.
### tcpseg
```
function tcpseg(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard ipfrag](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: [standard direction](#standard-direction)
* arg: [standard payload](#standard-payload)
* arg: [standard fooling](#standard-fooling)
* arg: [standard ipid](#standard-ipid)
* arg: [standard ipfrag](#standard-ipfrag)
* arg: [standard reconstruct](#standard-reconstruct)
* arg: [standard rawsend](#standard-rawsend)
* arg: pos - список из двух маркеров, определяющий границы tcp сегмента
* arg: seqovl - число - смещение относительно текущего sequence для создания дополнительной части сегмента, выходящей влево за границу tcp window
* arg: seqovl_pattern - blob, используемый для заполнения seqovl. По умолчанию 0x00