Template
1
0
mirror of https://github.com/bol-van/zapret2.git synced 2026-03-19 07:45:49 +00:00

update docs

This commit is contained in:
bol-van
2025-12-19 13:11:42 +03:00
parent 320f938418
commit a5ca736ad7

View File

@@ -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.