From a5ca736ad7f6ebdabf7ab73362004f94f7e069a1 Mon Sep 17 00:00:00 2001 From: bol-van Date: Fri, 19 Dec 2025 13:11:42 +0300 Subject: [PATCH] update docs --- docs/manual.md | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/docs/manual.md b/docs/manual.md index 3afb0f9..fec8d05 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -1271,7 +1271,7 @@ ipv6 extension headers и tcp options представляются в форме | t_start | number | unix time первого пакета потока | включает дробную часть с высокой точностью | | pos | table | счетчики по различным направлениям | содержит таблицы client, server, direct, reverse | -Таблица track.pos содержит подтаблицы с набором [счетчиков](#внутрипрофильные-фильтры) по двум направлениям - client и server. +Таблица track.pos содержит подтаблицы с набором счетчиков по двум направлениям - client и server. client означает пакеты от клиента, server - пакеты от сервера. direct and reverse являются просто ссылкам на client и server. Куда указывает direct и reverse зависит от текущего направления - `desync.outgoing` и серверного режима - `b_server`. @@ -3110,3 +3110,51 @@ function synack_split(ctx, desync) Многие DPI ожидают стандартный ответ на SYN в виде SYN,ACK. В реальности получается, что ответ на SYN является тоже SYN, а потом клиент шлет серверу SYN,ACK. Тем самым DPI перестает понимать какая сторона является клиентом, а какая сервером, и алгоритм проверки дает сбой. Атака может сработать даже если клиент не делает ничего для обхода блокировки. Может использоваться совместно с клиентскими техниками для точечного пробития tcp. + +# Библиотека программ автоматизации и оркестрации zapret-auto.lua + +Стандартный порядок применения инстансов линеен - слева направо с учетом [внутрипрофильных фильтров](#внутрипрофильные-фильтры) и [instance cutoff](#instance_cutoff). nfqws2 никаких других вариантов не предоставляет. + +Конечно, вы можете написать свою LUA функцию, которая сделает что нужно и когда нужно. Но вам придется при этом изобрести какое-то количество велосипедов, дублировать код или того хуже - патчить стандартные функции antidpi, добавляя туда ваши хотелки, а потом это самостоятельно поддерживать. + +Суть механизмов оркестрации в отделении управляющей логики от логики непосредственных действий, чтобы не надо было ничего патчить, а если и писать свои функции, то писать в них только сам алгоритм управления, не мешая его с алгоритмами действий. + +Оркестрация неразрывно связана с понятием [плана выполнения (execution plan)](#execution_plan). Он включает в себя список инстансов, которые нужно вызвать последовательно с их параметрами и [фильтрами](#внутрипрофильные-фильтры). Базовый линейный оркестратор заложен в C код. Но эту роль может взять на себя и LUA функция, в которой можно запрограммировать любую логику. + +Например, можно сделать автоматические стратегии - если одна не работает, использовать другую. C код имеет подобную логику только в механизме [автоматических хостлистов](#фильтрация-по-листам). Но она не реализует динамическую смену стратегийю. + +## Хранилище состояний + +Логика автоматизации как правило простирается между пакетами и опирается на conntrack. Для хранения состояния потока используются элементы desync.track.lua_state. + +Другая часть информации простирается между соединениями и привязана к хосту. Для хранения этой информации используются глобальные таблицы, индексируемые по ключам. + +### automate_conn_record + +``` +function automate_conn_record(desync) +``` + +Возвращает таблицу - хранилище состояния автоматизации, привязанное к потоку. Функции автоматизации могут использовать любые поля. + +### standard_hostkey + +``` +function standard_hostkey(desync) +``` + +* arg: reqhost - требовать наличие hostname, не работать по IP +* arg: nld - номер уровня домена, до которого отсекается hostname. если не задано - не отсекается + +Стандартный генератор host-ключей. Функция вычисляет строку-ключ, связанный с именем хоста или IP адресом, если имя хоста отсутствует. Если не может - возвращает nil. + +### automate_host_record + +``` +function automate_conn_record(desync) +``` + +* arg: key - ключ внутри глобальной таблицы autostate. если не задано, в качестве ключа используется имя текущего инстанса +* arg: hostkey - имя функции генератора host-ключей. если не задано, используется [standard_hostkey](#standard_hostkey) + +Возвращат таблицу - хранилище состояния автоматизации, привязанное к хосту или IP адресу. Используется 2 ключа - key и hostkey. Итоговое расположение - `autostate.key.hostkey`. Если hostkey получить не удается - возвращается nil.