diff --git a/docs/manual.md b/docs/manual.md
index d3e2fa5..9e9acbc 100644
--- a/docs/manual.md
+++ b/docs/manual.md
@@ -1,3 +1,252 @@
+- [Введение](#введение)
+- [Структура проекта](#структура-проекта)
+- [Схема обработки трафика](#схема-обработки-трафика)
+- [Перехват трафика из ядра ОС](#перехват-трафика-из-ядра-ос)
+ - [Перехват трафика в ядре Linux](#перехват-трафика-в-ядре-linux)
+ - [Перехват трафика с помощью nftables](#перехват-трафика-с-помощью-nftables)
+ - [Перехват трафика с помощью iptables](#перехват-трафика-с-помощью-iptables)
+ - [Перехват трафика в ядре FreeBSD](#перехват-трафика-в-ядре-freebsd)
+ - [Перехват трафика в ядре OpenBSD](#перехват-трафика-в-ядре-openbsd)
+ - [Перехват трафика в ядре Windows](#перехват-трафика-в-ядре-windows)
+- [nfqws2](#nfqws2)
+ - [Общие принципы задания параметров](#общие-принципы-задания-параметров)
+ - [Полный список опций](#полный-список-опций)
+ - [Использование множественных профилей](#использование-множественных-профилей)
+ - [Шаблоны профилей](#шаблоны-профилей)
+ - [Фильтрация по листам](#фильтрация-по-листам)
+ - [Детектор неудач автохостлистов](#детектор-неудач-автохостлистов)
+ - [Фильтр по наличию сетей](#фильтр-по-наличию-сетей)
+ - [Серверный режим](#серверный-режим)
+ - [Кэш IP](#кэш-ip)
+ - [Сигналы](#сигналы)
+ - [Отладка](#отладка)
+ - [Виртуальные машины](#виртуальные-машины)
+ - [Песочница](#песочница)
+ - [Вызов LUA кода](#вызов-lua-кода)
+ - [Передача блобов](#передача-блобов)
+ - [Внутрипрофильные фильтры](#внутрипрофильные-фильтры)
+ - [Типичная схема вызова инстансов внутри профиля](#типичная-схема-вызова-инстансов-внутри-профиля)
+ - [Прототип LUA функции](#прототип-lua-функции)
+ - [Структура таблицы desync](#структура-таблицы-desync)
+ - [Структура диссекта](#структура-диссекта)
+ - [Особенности приема многопакетных пейлоадов](#особенности-приема-многопакетных-пейлоадов)
+ - [Структура track](#структура-track)
+- [С интерфейс nfqws2](#с-интерфейс-nfqws2)
+ - [Базовые константы](#базовые-константы)
+ - [Стандартные блобы](#стандартные-блобы)
+ - [C функции](#c-функции)
+ - [Логгинг](#логгинг)
+ - [Конвертация IP](#конвертация-ip)
+ - [Битовые операции](#битовые-операции)
+ - [Операции с беззнаковыми числами](#операции-с-беззнаковыми-числами)
+ - [uX](#ux)
+ - [buX](#bux)
+ - [swapX](#swapx)
+ - [uXadd](#uxadd)
+ - [Целочисленное деление](#целочисленное-деление)
+ - [divint](#divint)
+ - [Генерация случайных данных](#генерация-случайных-данных)
+ - [brandom](#brandom)
+ - [Парсинг](#парсинг)
+ - [parse\_hex](#parse_hex)
+ - [Криптография](#криптография)
+ - [bcryptorandom](#bcryptorandom)
+ - [hash](#hash)
+ - [aes](#aes)
+ - [aes\_gcm](#aes_gcm)
+ - [aes\_ctr](#aes_ctr)
+ - [hkdf](#hkdf)
+ - [Системные функции](#системные-функции)
+ - [uname](#uname)
+ - [clock\_gettime](#clock_gettime)
+ - [getpid](#getpid)
+ - [Опции по работе с пакетами](#опции-по-работе-с-пакетами)
+ - [standard reconstruct](#standard-reconstruct)
+ - [standard rawsend](#standard-rawsend)
+ - [Диссекция и реконструкция](#диссекция-и-реконструкция)
+ - [dissect](#dissect)
+ - [reconstruct\_dissect](#reconstruct_dissect)
+ - [reconstruct\_hdr](#reconstruct_hdr)
+ - [csum\_fix](#csum_fix)
+ - [Прием и отсылка пакетов](#прием-и-отсылка-пакетов)
+ - [rawsend](#rawsend)
+ - [raw\_packet](#raw_packet)
+ - [Работа с пейлоадами](#работа-с-пейлоадами)
+ - [маркеры](#маркеры)
+ - [resolve\_pos](#resolve_pos)
+ - [Управление выполнением инстансов](#управление-выполнением-инстансов)
+ - [instance\_cutoff](#instance_cutoff)
+ - [lua\_cutoff](#lua_cutoff)
+ - [execution\_plan](#execution_plan)
+ - [execution\_plan\_cancel](#execution_plan_cancel)
+- [Библиотека базовых функций zapret-lib.lua](#библиотека-базовых-функций-zapret-liblua)
+ - [Базовые desync функции](#базовые-desync-функции)
+ - [luaexec](#luaexec)
+ - [pass](#pass)
+ - [pktdebug](#pktdebug)
+ - [argdebug](#argdebug)
+ - [posdebug](#posdebug)
+ - [detect\_payload\_str](#detect_payload_str)
+ - [desync\_orchestrator\_example](#desync_orchestrator_example)
+ - [Служебные функции](#служебные-функции)
+ - [var\_debug](#var_debug)
+ - [deepcopy](#deepcopy)
+ - [logical\_xor](#logical_xor)
+ - [Работа со строками](#работа-со-строками)
+ - [in\_list](#in_list)
+ - [find\_next\_line](#find_next_line)
+ - [Обслуживание raw string](#обслуживание-raw-string)
+ - [hex](#hex)
+ - [pattern](#pattern)
+ - [blob](#blob)
+ - [Обслуживание tcp sequence numbers](#обслуживание-tcp-sequence-numbers)
+ - [Обслуживание позиций](#обслуживание-позиций)
+ - [Диссекция](#диссекция)
+ - [dissect\_url](#dissect_url)
+ - [dissect\_nld](#dissect_nld)
+ - [dissect\_http](#dissect_http)
+ - [Работа с элементами L3 и L4 протоколов](#работа-с-элементами-l3-и-l4-протоколов)
+ - [find\_tcp\_options](#find_tcp_options)
+ - [ip6hdr](#ip6hdr)
+ - [packet\_len](#packet_len)
+ - [Работа с именами хостов](#работа-с-именами-хостов)
+ - [genhost](#genhost)
+ - [host\_ip](#host_ip)
+ - [Операции с именами файлов и путями](#операции-с-именами-файлов-и-путями)
+ - [autottl](#autottl)
+ - [Операции с диссектами](#операции-с-диссектами)
+ - [standard ipid](#standard-ipid)
+ - [standard fooling](#standard-fooling)
+ - [standard ipfrag](#standard-ipfrag)
+ - [apply\_ip\_id](#apply_ip_id)
+ - [apply\_fooling](#apply_fooling)
+ - [ipfrag2](#ipfrag2)
+ - [wssize\_rewrite](#wssize_rewrite)
+ - [dis\_reverse](#dis_reverse)
+ - [Отсылка](#отсылка)
+ - [rawsend\_dissect\_ipfrag](#rawsend_dissect_ipfrag)
+ - [rawsend\_dissect\_segmented](#rawsend_dissect_segmented)
+ - [rawsend\_payload\_segmented](#rawsend_payload_segmented)
+ - [Стандартные фильтры direction и payload](#стандартные-фильтры-direction-и-payload)
+ - [Работа с многопакетными пейлоадам](#работа-с-многопакетными-пейлоадам)
+ - [Оркестрация](#оркестрация)
+ - [instance\_cutoff\_shim](#instance_cutoff_shim)
+ - [cutoff\_shim\_check](#cutoff_shim_check)
+ - [apply\_arg\_prefix](#apply_arg_prefix)
+ - [apply\_execution\_plan](#apply_execution_plan)
+ - [verdict\_aggregate](#verdict_aggregate)
+ - [plan\_instance\_execute](#plan_instance_execute)
+ - [plan\_instance\_pop](#plan_instance_pop)
+ - [plan\_clear](#plan_clear)
+ - [orchestrate](#orchestrate)
+ - [replay\_execution\_plan](#replay_execution_plan)
+- [Библиотека программ атаки на DPI zapret-antidpi.lua](#библиотека-программ-атаки-на-dpi-zapret-antidpilua)
+ - [Стандартные наборы параметров](#стандартные-наборы-параметров)
+ - [standard direction](#standard-direction)
+ - [standard payload](#standard-payload)
+ - [Базовые функции](#базовые-функции)
+ - [drop](#drop)
+ - [send](#send)
+ - [pktmod](#pktmod)
+ - [Дурение http](#дурение-http)
+ - [http\_hostcase](#http_hostcase)
+ - [http\_domcase](#http_domcase)
+ - [http\_methodeol](#http_methodeol)
+ - [Замена window size](#замена-window-size)
+ - [wsize](#wsize)
+ - [wssize](#wssize)
+ - [Фейки](#фейки)
+ - [syndata](#syndata)
+ - [fake](#fake)
+ - [rst](#rst)
+ - [TCP сегментация](#tcp-сегментация)
+ - [multisplit](#multisplit)
+ - [multidisorder](#multidisorder)
+ - [multidisorder\_legacy](#multidisorder_legacy)
+ - [fakedsplit](#fakedsplit)
+ - [fakeddisorder](#fakeddisorder)
+ - [hostfakesplit](#hostfakesplit)
+ - [tcpseg](#tcpseg)
+ - [Дурение udp](#дурение-udp)
+ - [udplen](#udplen)
+ - [dht\_dn](#dht_dn)
+ - [Другие функции](#другие-функции)
+ - [synack](#synack)
+ - [synack\_split](#synack_split)
+- [Библиотека программ автоматизации и оркестрации zapret-auto.lua](#библиотека-программ-автоматизации-и-оркестрации-zapret-autolua)
+ - [Хранилище состояний](#хранилище-состояний)
+ - [automate\_conn\_record](#automate_conn_record)
+ - [standard\_hostkey](#standard_hostkey)
+ - [automate\_host\_record](#automate_host_record)
+ - [Обслуживание удач и неудач](#обслуживание-удач-и-неудач)
+ - [automate\_failure\_counter](#automate_failure_counter)
+ - [automate\_failure\_counter\_reset](#automate_failure_counter_reset)
+ - [Детекция удач и неудач](#детекция-удач-и-неудач)
+ - [automate\_failure\_check](#automate_failure_check)
+ - [standard\_success\_detector](#standard_success_detector)
+ - [standard\_failure\_detector](#standard_failure_detector)
+ - [Оркестраторы](#оркестраторы)
+ - [circular](#circular)
+ - [repeater](#repeater)
+ - [condition](#condition)
+ - [stopif](#stopif)
+ - [iff функции](#iff-функции)
+ - [cond\_true](#cond_true)
+ - [cond\_false](#cond_false)
+ - [cond\_random](#cond_random)
+ - [cond\_payload\_str](#cond_payload_str)
+- [Вспомогательные программы](#вспомогательные-программы)
+ - [ip2net](#ip2net)
+ - [mdig](#mdig)
+- [blockcheck2](#blockcheck2)
+ - [Проверка DNS](#проверка-dns)
+ - [Основные режимы тестирования](#основные-режимы-тестирования)
+ - [Множественные попытки](#множественные-попытки)
+ - [Уровни сканирования](#уровни-сканирования)
+ - [Поддерживаемые протоколы](#поддерживаемые-протоколы)
+ - [Проверка блока по IP](#проверка-блока-по-ip)
+ - [Примеры блокировки только по домену без блока по IP](#примеры-блокировки-только-по-домену-без-блока-по-ip)
+ - [Пример полного IP блока или блока TCP порта при отсутствии блока по домену](#пример-полного-ip-блока-или-блока-tcp-порта-при-отсутствии-блока-по-домену)
+ - [Стандартные тесты](#стандартные-тесты)
+ - [Тест standard](#тест-standard)
+ - [Тест custom](#тест-custom)
+ - [Summary](#summary)
+ - [Shell переменные](#shell-переменные)
+- [Скрипты запуска](#скрипты-запуска)
+ - [Файл config](#файл-config)
+ - [Система ведения листов](#система-ведения-листов)
+ - [Стандартные файлы листов](#стандартные-файлы-листов)
+ - [Скрипты ipset](#скрипты-ipset)
+ - [clear\_lists.sh](#clear_listssh)
+ - [create\_ipset.sh](#create_ipsetsh)
+ - [get\_config.sh](#get_configsh)
+ - [get\_user.sh](#get_usersh)
+ - [get\_ipban.sh](#get_ipbansh)
+ - [get\_exclude.sh](#get_excludesh)
+ - [get\_antifilter\_\*.sh](#get_antifilter_sh)
+ - [get\_antizapret\_domains.sh](#get_antizapret_domainssh)
+ - [get\_refilter\_\*.sh](#get_refilter_sh)
+ - [get\_reestr\_\*.sh](#get_reestr_sh)
+ - [Стартовые скрипты](#стартовые-скрипты)
+ - [Интеграция с firewall](#интеграция-с-firewall)
+ - [Интеграция с OpenWRT firewall](#интеграция-с-openwrt-firewall)
+ - [custom скрипты](#custom-скрипты)
+ - [custom хелперы](#custom-хелперы)
+ - [Получение динамических номеров](#получение-динамических-номеров)
+ - [Работа с демонами](#работа-с-демонами)
+ - [Работа с iptables](#работа-с-iptables)
+ - [Работа с nftables](#работа-с-nftables)
+ - [Дополнительные функции](#дополнительные-функции)
+ - [Инсталлятор](#инсталлятор)
+ - [Принципы интеграции с OpenWRT](#принципы-интеграции-с-openwrt)
+ - [Шпаргалка OpenWRT](#шпаргалка-openwrt)
+ - [Принципы интеграции с systemd](#принципы-интеграции-с-systemd)
+ - [Шпаргалка systemd](#шпаргалка-systemd)
+ - [Принципы интеграции с openrc](#принципы-интеграции-с-openrc)
+ - [Шпаргалка openrc](#шпаргалка-openrc)
+ - [Альтернативная установка на systemd](#альтернативная-установка-на-systemd)
+
+
# Введение
zapret2 является пакетным манипулятором, основная задача которого - совершение различных автономных атак на DPI в реальном времени
@@ -1120,34 +1369,34 @@ desync:
desync
-| Поле | Тип | Содержание | Примечание |
-|:------|:-----|:-------------|:-----------|
-| func | string | имя desync функции | |
-| func_n | number | номер инстанса внутри профиля | |
-| func_instance | string | название инстанса | производная имени функции, номера инстанса и номера профиля |
-| profile_n | number | номер профиля | |
-| profile_name | string | название профиля | может отсутствовать |
-| template_n | number | номер шаблона, на базе которого создан профиль | может отсутствовать |
-| template_name | string | название шаблона, на базе которого создан профиль | может отсутствовать |
-| cookie | string | значение параметра nfqws2 --cookie для профиля | может отсутствовать |
-| outgoing | bool | true , если направление исходящее | |
-| ifin | string | имя входящего интерфейса | может отсутствовать |
-| ifout | string | имя исходящего интерфейса | может отсутствовать |
-| fwmark | number | fwmark текущего пакета | только в Linux |
-| target | table | таблица, включающая ip адрес и порт, на базе которых проверяются ipset-ы и фильтры по портам | |
-| replay | bool | проигрывание задержанного пакета (replay) | |
-| replay_piece | number | номер проигрываемой части | нумерация с 1 |
-| replay_piece_count | number | количество проигрываемых частей| |
-| replay_piece_last | bool | последняя проигрываемая часть | |
-| l7payload | string | тип пейлоада текущего пакета или группы пакетов. список возможных в help тексте nfqws2 | если неизвестно - unknown |
-| l7proto | string | тип протокола потока | если неизвестно - unknown |
-| reasm_data | string | результат сборки многопакетного сообщения, либо сам пейлоад, если сборки не было | пока применяется только для tcp |
-| reasm_offset | string | смещение текущего переигрываемого пакета в сборке | пока применяется только для tcp |
-| decrypt_data | string | результат сборки и дешифровки пейлоада или пейлоадов нескольких пакетов | применяется для quic |
-| tcp_mss | number | MSS противоположного конца tcp соединения | присутствует всегда, только для tcp |
-| track | table | данные, привязанные к записи conntrack | только если есть conntrack, может не быть |
-| arg | table | все аргументы инстанса и их значения | подстановки % и # уже замещены |
-| dis | table | диссект текущего пакета | |
+| Поле | Тип | Содержание | Примечание |
+| :----------------- | :----- | :------------------------------------------------------------------------------------------- | :---------------------------------------------------------- |
+| func | string | имя desync функции | |
+| func_n | number | номер инстанса внутри профиля | |
+| func_instance | string | название инстанса | производная имени функции, номера инстанса и номера профиля |
+| profile_n | number | номер профиля | |
+| profile_name | string | название профиля | может отсутствовать |
+| template_n | number | номер шаблона, на базе которого создан профиль | может отсутствовать |
+| template_name | string | название шаблона, на базе которого создан профиль | может отсутствовать |
+| cookie | string | значение параметра nfqws2 --cookie для профиля | может отсутствовать |
+| outgoing | bool | true , если направление исходящее | |
+| ifin | string | имя входящего интерфейса | может отсутствовать |
+| ifout | string | имя исходящего интерфейса | может отсутствовать |
+| fwmark | number | fwmark текущего пакета | только в Linux |
+| target | table | таблица, включающая ip адрес и порт, на базе которых проверяются ipset-ы и фильтры по портам | |
+| replay | bool | проигрывание задержанного пакета (replay) | |
+| replay_piece | number | номер проигрываемой части | нумерация с 1 |
+| replay_piece_count | number | количество проигрываемых частей | |
+| replay_piece_last | bool | последняя проигрываемая часть | |
+| l7payload | string | тип пейлоада текущего пакета или группы пакетов. список возможных в help тексте nfqws2 | если неизвестно - unknown |
+| l7proto | string | тип протокола потока | если неизвестно - unknown |
+| reasm_data | string | результат сборки многопакетного сообщения, либо сам пейлоад, если сборки не было | пока применяется только для tcp |
+| reasm_offset | string | смещение текущего переигрываемого пакета в сборке | пока применяется только для tcp |
+| decrypt_data | string | результат сборки и дешифровки пейлоада или пейлоадов нескольких пакетов | применяется для quic |
+| tcp_mss | number | MSS противоположного конца tcp соединения | присутствует всегда, только для tcp |
+| track | table | данные, привязанные к записи conntrack | только если есть conntrack, может не быть |
+| arg | table | все аргументы инстанса и их значения | подстановки % и # уже замещены |
+| dis | table | диссект текущего пакета | |
### Структура диссекта
@@ -1164,80 +1413,80 @@ ipv6 extension headers и tcp options представляются в форме
Все числовые многобайтовые значения автоматически переведены из network byte order в machine byte order.
**dissect**
-| Поле | Тип | Описание |
-|:------|:----|:---------|
-| ip | table | заголовок ipv4 |
-| ip6 | table | заголовок ipv6 |
-| tcp | table | заголовок tcp |
-| udp | table | заголовок udp |
-| l4proto | number | IPPROTO_TCP или IPPROTO_UDP |
-| transport_len | number | длина пакета без L3 заголовков |
-| l3_len | number | длина L3 заголовков, включая ip options и ipv6 extension headers |
-| l4_len | number | длина L4 заголовка, включая tcp options |
-| payload | string | L4 пейлоад |
+| Поле | Тип | Описание |
+| :------------ | :----- | :--------------------------------------------------------------- |
+| ip | table | заголовок ipv4 |
+| ip6 | table | заголовок ipv6 |
+| tcp | table | заголовок tcp |
+| udp | table | заголовок udp |
+| l4proto | number | IPPROTO_TCP или IPPROTO_UDP |
+| transport_len | number | длина пакета без L3 заголовков |
+| l3_len | number | длина L3 заголовков, включая ip options и ipv6 extension headers |
+| l4_len | number | длина L4 заголовка, включая tcp options |
+| payload | string | L4 пейлоад |
**ip**
-| Поле | Описание |
-|:------|:---------|
-| ip_v | версия ip - 4 |
-| ip_hl | длина ip заголовка в блоках по 4 байта. 5 без ip options. |
-| ip_tos | type of service. содержит DSCP |
-| ip_len | полная длина ip пакета вместе со всеми заголовками и пейлоадом |
-| ip_id | идентификация пакета для сборки из фрагментов |
-| ip_off | offset фрагмента, флаги MF (more fragments) и DF (dont fragment) |
-| ip_ttl | time to live - максимальное количество хопов |
-| ip_p | [номер ip протокола](https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). как правило IPPROTO_TCP или IPPROTO_UDP |
-| ip_sum | чексумма ip хедера |
-| ip_src | ip источника |
-| ip_src | ip назначения |
-| options | бинарный блок ip options (практически не используется, режется всеми) |
+| Поле | Описание |
+| :------ | :-------------------------------------------------------------------------------------------------------------------------------------- |
+| ip_v | версия ip - 4 |
+| ip_hl | длина ip заголовка в блоках по 4 байта. 5 без ip options. |
+| ip_tos | type of service. содержит DSCP |
+| ip_len | полная длина ip пакета вместе со всеми заголовками и пейлоадом |
+| ip_id | идентификация пакета для сборки из фрагментов |
+| ip_off | offset фрагмента, флаги MF (more fragments) и DF (dont fragment) |
+| ip_ttl | time to live - максимальное количество хопов |
+| ip_p | [номер ip протокола](https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). как правило IPPROTO_TCP или IPPROTO_UDP |
+| ip_sum | чексумма ip хедера |
+| ip_src | ip источника |
+| ip_src | ip назначения |
+| options | бинарный блок ip options (практически не используется, режется всеми) |
**ip6**
-| Поле | Описание |
-|:------|:---------|
-| ip6_flow | первые 4 байта ipv6 header : version (6), traffic class, flow label |
-| ip6_plen | длина пакета за вычетом базового хедера ipv6 - IP6_BASE_LEN (40) байт |
-| ip6_nxt | [следующий протокол](https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). если нет exthdr - IPPROTO_TCP (6) или IPPROTO_UDP (17) |
-| ip6_hlim | hop limit. имеет тот же смысл, что и TTL в ipv4 |
-| ip6_src | ipv6 адрес источника |
-| ip6_dst | ipv6 адрес приемника |
-| exthdr | массив таблиц расширенных хедеров (индекс от 1) |
+| Поле | Описание |
+| :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |
+| ip6_flow | первые 4 байта ipv6 header : version (6), traffic class, flow label |
+| ip6_plen | длина пакета за вычетом базового хедера ipv6 - IP6_BASE_LEN (40) байт |
+| ip6_nxt | [следующий протокол](https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). если нет exthdr - IPPROTO_TCP (6) или IPPROTO_UDP (17) |
+| ip6_hlim | hop limit. имеет тот же смысл, что и TTL в ipv4 |
+| ip6_src | ipv6 адрес источника |
+| ip6_dst | ipv6 адрес приемника |
+| exthdr | массив таблиц расширенных хедеров (индекс от 1) |
**ip6 exthdr**
-| Поле | Описание |
-|:------|:---------|
+| Поле | Описание |
+| :--- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| type | [тип хедера](https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml) : IPPROTO_HOPOPTS, IPPROTO_ROUTING, IPPROTO_DSTOPTS, IPPROTO_MH, IPPROTO_HIP, IPPROTO_SHIM6, IPPROTO_FRAGMENT, IPPROTO_AH |
-| next | тип следующего хедера. аналогично type. для последнего хедера может быть IPPROTO_TCP или IPPROTO_UDP |
-| data | данные без первых двух байтов - типа и длины |
+| next | тип следующего хедера. аналогично type. для последнего хедера может быть IPPROTO_TCP или IPPROTO_UDP |
+| data | данные без первых двух байтов - типа и длины |
**udp**
-| Поле | Описание |
-|:------|:---------|
-| uh_sport | порт источника |
-| uh_dport | порт приемника |
-| uh_ulen | длина udp - header UDP_BASE_LEN (8) + длина пейлоада |
-| uh_sum | чексумма udp |
+| Поле | Описание |
+| :------- | :--------------------------------------------------- |
+| uh_sport | порт источника |
+| uh_dport | порт приемника |
+| uh_ulen | длина udp - header UDP_BASE_LEN (8) + длина пейлоада |
+| uh_sum | чексумма udp |
**tcp**
-| Поле | Описание |
-|:------|:---------|
-| th_sport | порт источника |
-| th_dport | порт приемника |
-| th_x2 | зарезервированное поле. используется для расширенных tcp flags |
-| th_off | размер tcp хедера в блоках по 4 байта |
-| th_flags | tcp флаги : TH_FIN,TH_SYN,TH_RST,TH_PUSH,TH_ACK,TH_FIN,TH_URG,TH_ECE,TH_CWR |
-| th_seq | sequence number |
-| th_ack | acknowledgement number |
-| th_win | размер tcp окна |
-| th_sum | чексумма tcp |
-| th_urp | urgent pointer |
-| options | массив таблиц [tcp опций](https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml) (индекс от 1) |
+| Поле | Описание |
+| :------- | :------------------------------------------------------------------------------------------------------------ |
+| th_sport | порт источника |
+| th_dport | порт приемника |
+| th_x2 | зарезервированное поле. используется для расширенных tcp flags |
+| th_off | размер tcp хедера в блоках по 4 байта |
+| th_flags | tcp флаги : TH_FIN,TH_SYN,TH_RST,TH_PUSH,TH_ACK,TH_FIN,TH_URG,TH_ECE,TH_CWR |
+| th_seq | sequence number |
+| th_ack | acknowledgement number |
+| th_win | размер tcp окна |
+| th_sum | чексумма tcp |
+| th_urp | urgent pointer |
+| options | массив таблиц [tcp опций](https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml) (индекс от 1) |
**tcp options**
-| Поле | Описание |
-|:------|:---------|
+| Поле | Описание |
+| :--- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| kind | [тип опции](https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml) : TCP_KIND_END, TCP_KIND_NOOP, TCP_KIND_MSS, TCP_KIND_SCALE, TCP_KIND_SACK_PERM, TCP_KIND_SACK, TCP_KIND_TS, TCP_KIND_MD5, TCP_KIND_AO, TCP_KIND_FASTOPEN |
-| data | блок данных опции без kind и length. отсутствует для TCP_KIND_END и TCP_KIND_NOOP |
+| data | блок данных опции без kind и length. отсутствует для TCP_KIND_END и TCP_KIND_NOOP |
### Особенности приема многопакетных пейлоадов
@@ -1265,17 +1514,17 @@ ipv6 extension headers и tcp options представляются в форме
То же самое верно для опциональных полей track. Проверяйте ваш код с `--ctrack-disable` и на разных протоколах - tcp, udp.
**track**
-| Поле | Тип | Описание | Примечание |
-|:------|:-----|:---------|:-----------|
-| incoming_ttl | number | ttl/hl первого входящего пакета по потоку | может не быть, если не определено |
-| l7proto | string | протокол потока. список возможных доступен в help тексте nfqws2 | есть всегда. если неизвестно - unknown |
-| hostname | string | имя хоста. определяется на основе анализа L6/L7 протоколов | появляется только после определения |
-| hostname_is_ip | bool | является ли hostname ip адресом | только если есть hostname |
-| lua_state | table | таблица для хранения состояния, привязанного к потоку | есть всегда, передается с каждым пакетом потока |
-| lua_in_cutoff | bool | отсечение LUA от входящего направления | только для чтения |
-| lua_out_cutoff | bool | отсечение LUA от исходящего направления | только для чтения |
-| t_start | number | unix time первого пакета потока | включает дробную часть с высокой точностью |
-| pos | table | счетчики по различным направлениям | содержит таблицы client, server, direct, reverse |
+| Поле | Тип | Описание | Примечание |
+| :------------- | :----- | :-------------------------------------------------------------- | :----------------------------------------------- |
+| incoming_ttl | number | ttl/hl первого входящего пакета по потоку | может не быть, если не определено |
+| l7proto | string | протокол потока. список возможных доступен в help тексте nfqws2 | есть всегда. если неизвестно - unknown |
+| hostname | string | имя хоста. определяется на основе анализа L6/L7 протоколов | появляется только после определения |
+| hostname_is_ip | bool | является ли hostname ip адресом | только если есть hostname |
+| lua_state | table | таблица для хранения состояния, привязанного к потоку | есть всегда, передается с каждым пакетом потока |
+| lua_in_cutoff | bool | отсечение LUA от входящего направления | только для чтения |
+| lua_out_cutoff | bool | отсечение LUA от исходящего направления | только для чтения |
+| t_start | number | unix time первого пакета потока | включает дробную часть с высокой точностью |
+| pos | table | счетчики по различным направлениям | содержит таблицы client, server, direct, reverse |
Таблица track.pos содержит подтаблицы с набором счетчиков по двум направлениям - client и server.
client означает пакеты от клиента, server - пакеты от сервера.
@@ -1288,23 +1537,23 @@ track.pos содержит еще одно поле - `dt`. Время полу
Список полей таблицы счетчиков приведен ниже. Подтаблица tcp присутствует только для tcp протокола.
-| Поле | Описание | Примечание |
-|:------|:---------|:-----------|
-| pcounter | счетчик пакетов | |
-| pdcounter | счетчик пакетов с данными | пакеты, у которых размер L4 пейлоада не равен 0 |
-| pbcounter | счетчик переданных байт | считаются только размеры пейлоада L4, заголовки - нет |
-| ip6_flow | последнее поле ip6.ip6_flow | отсутствует, если неизвестно или ip протокол - не ipv6 |
-| tcp.seq0 | начальный sequence соединения | |
-| tcp.seq | sequence текущего пакета | |
-| tcp.rseq | relative sequence текущего пакета | вычисляется как seq-seq0 |
-| tcp.rseq_over_2G | был переход rseq за границу 2 GB | s и p позиции больше нельзя учитывать |
-| tcp.pos | relative sequence верхней границы текущего пакета | вычисляется как rseq+payload_size |
-| tcp.uppos | максимальный pos в соединении | |
-| tcp.uppos_prev | uppos в предыдущем пакете с данными | полезно для определения ретрансмиссий |
-| tcp.winsize | последнее поле th_win | без коррекции по scale |
-| tcp.scale | последнее значение tcp опции scale | |
-| tcp.winsize_calc | коррекция winsize с учетом scale | эффективное значение tcp window size |
-| tcp.mss | последнее значение tcp опции mss | |
+| Поле | Описание | Примечание |
+| :--------------- | :------------------------------------------------ | :----------------------------------------------------- |
+| pcounter | счетчик пакетов | |
+| pdcounter | счетчик пакетов с данными | пакеты, у которых размер L4 пейлоада не равен 0 |
+| pbcounter | счетчик переданных байт | считаются только размеры пейлоада L4, заголовки - нет |
+| ip6_flow | последнее поле ip6.ip6_flow | отсутствует, если неизвестно или ip протокол - не ipv6 |
+| tcp.seq0 | начальный sequence соединения | |
+| tcp.seq | sequence текущего пакета | |
+| tcp.rseq | relative sequence текущего пакета | вычисляется как seq-seq0 |
+| tcp.rseq_over_2G | был переход rseq за границу 2 GB | s и p позиции больше нельзя учитывать |
+| tcp.pos | relative sequence верхней границы текущего пакета | вычисляется как rseq+payload_size |
+| tcp.uppos | максимальный pos в соединении | |
+| tcp.uppos_prev | uppos в предыдущем пакете с данными | полезно для определения ретрансмиссий |
+| tcp.winsize | последнее поле th_win | без коррекции по scale |
+| tcp.scale | последнее значение tcp опции scale | |
+| tcp.winsize_calc | коррекция winsize с учетом scale | эффективное значение tcp window size |
+| tcp.mss | последнее значение tcp опции mss | |
mss, winsize, scale передаются от одной стороны соединения другой стороне, чтобы она знала о допустимых параметрах партнера.
При использовани этих полей важно не перепутать сторону.
@@ -1328,42 +1577,42 @@ mss дублируется в поле `desync.tcp_mss` независимо о
## Базовые константы
-| Поле | Тип | Описание | Примечание |
-|:------|:-----|:---------|:-----------|
-| qnum | number | номер очереди NFQUEUE | только в Linux |
-| divert_port | number | номер порта divert | только в BSD |
-| desync_fwmark | number | fwmark для Linux, sockarg для BSD, 0 в Windows | |
-| NFQWS2_VER | string | версия nfqws2 | строка, выводимая по --version |
-| NFQWS2_COMPAT_VER | number | порядковый номер несовместимых изменений интерфейса с nfqws2 | увеличивается на 1 после каждого изменения |
-| b_debug | bool | включен --debug | вывод отладочных сообщений |
-| b_daemon | bool | включен --daemon | демонизация процесса, отвязка от tty |
-| b_server | bool | включен --server | серверный режим |
-| b_ipcache_hostname | bool | включен --ipcache-hostname | кэширование имен хостов, соответствующих IP адресам |
-| b_ctrack_disable | bool | включен --ctrack-disable | отключен conntrack |
-| VERDICT_PASS
VERDICT_MODIFY
VERDICT_DROP | number | код вердикта desync функции | |
-| DEFAULT_MSS | number | значение MSS по умолчанию | 1220 |
-| IP_BASE_LEN | number | базовый размер ipv4 хедера | 20 |
-| IP6_BASE_LEN | number | базовый размер ipv6 хедера | 40 |
-| TCP_BASE_LEN | number | базовый размер tcp хедера | 20 |
-| UDP_BASE_LEN | number | размер udp хедера | 8 |
-| TCP_KIND_END
TCP_KIND_NOOP
TCP_KIND_MSS
TCP_KIND_SCALE
TCP_KIND_SACK_PERM
TCP_KIND_SACK
TCP_KIND_TS
TCP_KIND_MD5
TCP_KIND_AO
TCP_KIND_FASTOPEN | number | коды типов tcp опций (kinds) | |
-| TH_FIN
TH_SYN
TH_RST
TH_PUSH
TH_ACK
TH_FIN
TH_URG
TH_ECE
TH_CWR | number | tcp флаги | можно складывать через + |
-| IP_MF | number | флаг IP "more fragments" | 0x8000, часть поля ip_off |
-| IP_DF | number | флаг IP "dont fragment" | 0x4000, часть поля ip_off |
-| IP_RF | number | флаг IP "reserved" | 0x2000, часть поля ip_off |
-| IP_OFFMASK | number | битовая маска поля ip_off, соответствующая fragment offset | 0x1FFF |
-| IP_FLAGMASK | number | битовая маска поля ip_off, соответствующая IP флагам | 0xE000 |
-| IPTOS_ECN_MASK | number | битовая маска поля ip_tos, соответствующая ECN | 0x03 |
-| IPTOS_ECN_NOT_ECT | number | Not ECN-Capable Transport | 0x00 |
-| IPTOS_ECN_ECT1 | number | ECN Capable Transport(1) | 0x01 |
-| IPTOS_ECN_ECT1 | number | ECN Capable Transport(0) | 0x02 |
-| IPTOS_ECN_CE1 | number | Congestion Experienced | 0x03 |
-| IPTOS_DSCP_MASK | number | битовая маска поля ip_tos, соответствующая DSCP | 0xFC |
-| IP6F_MORE_FRAG | number | бит "More fragment" поля ip6f_offlg из ipv6 fragment header | 0x0001 |
-| IP6 | number | бит "More fragment" поля ip6f_offlg из ipv6 fragment header | 0x0001 |
-| IPV6_FLOWLABEL_MASK | number | flow label в ip6_flow | 0x000FFFFF |
-| IPV6_FLOWINFO_MASK | number | flow label, traffic class в ip6_flow | 0x0FFFFFFF |
-| IPPROTO_IP
IPPROTO_IPV6
IPPROTO_ICMP
IPPROTO_TCP
IPPROTO_UDP
IPPROTO_ICMPV6
IPPROTO_HOPOPTS
IPPROTO_ROUTING
IPPROTO_FRAGMENT
IPPROTO_AH
IPPROTO_ESP
IPPROTO_DSTOPTS
IPPROTO_MH
IPPROTO_HIP
IPPROTO_SHIM6
IPPROTO_NONE | number | [номера IP протоколов](https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml) | используются в ipv4 и ipv6 |
+| Поле | Тип | Описание | Примечание |
+| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----- | :----------------------------------------------------------------------------------------------- | :-------------------------------------------------- |
+| qnum | number | номер очереди NFQUEUE | только в Linux |
+| divert_port | number | номер порта divert | только в BSD |
+| desync_fwmark | number | fwmark для Linux, sockarg для BSD, 0 в Windows | |
+| NFQWS2_VER | string | версия nfqws2 | строка, выводимая по --version |
+| NFQWS2_COMPAT_VER | number | порядковый номер несовместимых изменений интерфейса с nfqws2 | увеличивается на 1 после каждого изменения |
+| b_debug | bool | включен --debug | вывод отладочных сообщений |
+| b_daemon | bool | включен --daemon | демонизация процесса, отвязка от tty |
+| b_server | bool | включен --server | серверный режим |
+| b_ipcache_hostname | bool | включен --ipcache-hostname | кэширование имен хостов, соответствующих IP адресам |
+| b_ctrack_disable | bool | включен --ctrack-disable | отключен conntrack |
+| VERDICT_PASS
VERDICT_MODIFY
VERDICT_DROP | number | код вердикта desync функции | |
+| DEFAULT_MSS | number | значение MSS по умолчанию | 1220 |
+| IP_BASE_LEN | number | базовый размер ipv4 хедера | 20 |
+| IP6_BASE_LEN | number | базовый размер ipv6 хедера | 40 |
+| TCP_BASE_LEN | number | базовый размер tcp хедера | 20 |
+| UDP_BASE_LEN | number | размер udp хедера | 8 |
+| TCP_KIND_END
TCP_KIND_NOOP
TCP_KIND_MSS
TCP_KIND_SCALE
TCP_KIND_SACK_PERM
TCP_KIND_SACK
TCP_KIND_TS
TCP_KIND_MD5
TCP_KIND_AO
TCP_KIND_FASTOPEN | number | коды типов tcp опций (kinds) | |
+| TH_FIN
TH_SYN
TH_RST
TH_PUSH
TH_ACK
TH_FIN
TH_URG
TH_ECE
TH_CWR | number | tcp флаги | можно складывать через + |
+| IP_MF | number | флаг IP "more fragments" | 0x8000, часть поля ip_off |
+| IP_DF | number | флаг IP "dont fragment" | 0x4000, часть поля ip_off |
+| IP_RF | number | флаг IP "reserved" | 0x2000, часть поля ip_off |
+| IP_OFFMASK | number | битовая маска поля ip_off, соответствующая fragment offset | 0x1FFF |
+| IP_FLAGMASK | number | битовая маска поля ip_off, соответствующая IP флагам | 0xE000 |
+| IPTOS_ECN_MASK | number | битовая маска поля ip_tos, соответствующая ECN | 0x03 |
+| IPTOS_ECN_NOT_ECT | number | Not ECN-Capable Transport | 0x00 |
+| IPTOS_ECN_ECT1 | number | ECN Capable Transport(1) | 0x01 |
+| IPTOS_ECN_ECT1 | number | ECN Capable Transport(0) | 0x02 |
+| IPTOS_ECN_CE1 | number | Congestion Experienced | 0x03 |
+| IPTOS_DSCP_MASK | number | битовая маска поля ip_tos, соответствующая DSCP | 0xFC |
+| IP6F_MORE_FRAG | number | бит "More fragment" поля ip6f_offlg из ipv6 fragment header | 0x0001 |
+| IP6 | number | бит "More fragment" поля ip6f_offlg из ipv6 fragment header | 0x0001 |
+| IPV6_FLOWLABEL_MASK | number | flow label в ip6_flow | 0x000FFFFF |
+| IPV6_FLOWINFO_MASK | number | flow label, traffic class в ip6_flow | 0x0FFFFFFF |
+| IPPROTO_IP
IPPROTO_IPV6
IPPROTO_ICMP
IPPROTO_TCP
IPPROTO_UDP
IPPROTO_ICMPV6
IPPROTO_HOPOPTS
IPPROTO_ROUTING
IPPROTO_FRAGMENT
IPPROTO_AH
IPPROTO_ESP
IPPROTO_DSTOPTS
IPPROTO_MH
IPPROTO_HIP
IPPROTO_SHIM6
IPPROTO_NONE | number | [номера IP протоколов](https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml) | используются в ipv4 и ipv6 |
### Стандартные блобы
@@ -1648,11 +1897,11 @@ function gettid()
#### standard reconstruct
Опции реконструкции диссектов - reconstruct_opts. Реконструкция - это сборка raw пакета из диссекта.
-| Поле | Тип | Описание |
-|:------|:----|:---------|
-| badsum | bool | испортить L4 checksum. посчитать чексумму и сделать xor со случайным значением от 1 до 0xFFFF |
-| ip6_preserve_next | bool | использовать значения "next" из ip6.exthdr |
-| ip6_last_proto | number | если ip6_preserve_next=true, IP протокол последнего exthdr |
+| Поле | Тип | Описание |
+| :---------------- | :----- | :-------------------------------------------------------------------------------------------- |
+| badsum | bool | испортить L4 checksum. посчитать чексумму и сделать xor со случайным значением от 1 до 0xFFFF |
+| ip6_preserve_next | bool | использовать значения "next" из ip6.exthdr |
+| ip6_last_proto | number | если ip6_preserve_next=true, IP протокол последнего exthdr |
При сборке ipv6 по умолчанию цепочка ip протоколов в exthdr собирается автоматически.
У каждого exthdr есть поле type, поэтому понятно что вписывать в предыдущий exthdr,
@@ -1673,11 +1922,11 @@ badsum вынесен в реконструкцию, поскольку чекс
#### standard rawsend
Опции отсылки raw пакетов - rawsend_opts
-| Поле | Тип | Описание |
-|:------|:----|:---------|
-| repeats | number | количество повторов отсылки одного и того же пакета |
-| fwmark | number | fwmark исходящего пакета. только для linux. по умолчанию 0. бит desync_mark устанавливается принудительно |
-| ifout | string | исходящий интерфейс. может использоваться или не использоваться в разных ситуациях |
+| Поле | Тип | Описание |
+| :------ | :----- | :-------------------------------------------------------------------------------------------------------- |
+| repeats | number | количество повторов отсылки одного и того же пакета |
+| fwmark | number | fwmark исходящего пакета. только для linux. по умолчанию 0. бит desync_mark устанавливается принудительно |
+| ifout | string | исходящий интерфейс. может использоваться или не использоваться в разных ситуациях |
ifout всегда следует передавать таким, каким он пришел в диссекте.
Для windows правильный ifout обязателен. На BSD он не используется.
@@ -1858,26 +2107,26 @@ function execution_plan(ctx)
их внутрипрофильных фильтрах и аргументах.
**Элемент plan**
-| Поле | Тип | Описание |
-|:------|:----|:---------|
-| func | string | имя desync функции |
-| func_n | number | номер инстанса внутри профиля |
-| func_instance | string | название инстанса | производная имени функции, номера инстанса и номера профиля |
-| range | table | эффективный диапазон [счетчиков](#внутрипрофильные-фильтры) `--in-range` или `--out-range` в зависимости от текущего направления |
-| payload_filter | string | эффективный `--payload-filter` . список названий пейлоадов через запятую |
+| Поле | Тип | Описание |
+| :------------- | :----- | :------------------------------------------------------------------------------------------------------------------------------- |
+| func | string | имя desync функции |
+| func_n | number | номер инстанса внутри профиля |
+| func_instance | string | название инстанса | производная имени функции, номера инстанса и номера профиля |
+| range | table | эффективный диапазон [счетчиков](#внутрипрофильные-фильтры) `--in-range` или `--out-range` в зависимости от текущего направления |
+| payload_filter | string | эффективный `--payload-filter` . список названий пейлоадов через запятую |
**range**
-| Поле | Тип | Описание |
-|:------|:------|:---------|
-| from | table | позиция нижней границы |
-| to | table | позиция верхней границы |
-| upper_cutoff | bool | true = верхняя граница невключительна, false = включительна |
+| Поле | Тип | Описание |
+| :----------- | :---- | :---------------------------------------------------------- |
+| from | table | позиция нижней границы |
+| to | table | позиция верхней границы |
+| upper_cutoff | bool | true = верхняя граница невключительна, false = включительна |
**pos - from,to**
-| Поле | Тип | Описание |
-|:------|:-------|:---------|
-| mode | string | режим счетчика - a, x, n, d, b, s, p |
-| pos | number | значение счетчика |
+| Поле | Тип | Описание |
+| :--- | :----- | :----------------------------------- |
+| mode | string | режим счетчика - a, x, n, d, b, s, p |
+| pos | number | значение счетчика |
#### execution_plan_cancel
@@ -2351,10 +2600,10 @@ delta - это положительная или отрицательная ра
### standard ipid
**ipid_options**
-| Поле | Описание |
-|:------|:---------|
-| ip_id | режим назначения ip_id : seq, rnd, zero, none
seq - последовательное
rnd - случайное
zero - ноль
none - не менять |
-| ip_id_conn | запоминать последнее сгенерированное значение seq и начинать с него в следующем пакете. не работает без desync.track |
+| Поле | Описание |
+| :--------- | :---------------------------------------------------------------------------------------------------------------------------- |
+| ip_id | режим назначения ip_id : seq, rnd, zero, none
seq - последовательное
rnd - случайное
zero - ноль
none - не менять |
+| ip_id_conn | запоминать последнее сгенерированное значение seq и начинать с него в следующем пакете. не работает без desync.track |
Из seq далеко не всегда получится ожидаемая и преемлемая последовательность.
ip_id применяется только в ряде функций, оно не применяется ко всем проходящим пакетам автоматически.
@@ -2366,26 +2615,26 @@ Windows заменяет нулевые ip_id на собственную пос
### standard fooling
**fooling_options**
-| Поле | Описание |
-|:------|:---------|
-| ip_ttl | изменить TTL в ipv4 заголовке на указанный |
-| ip6_ttl | изменить TTL (HL) в ipv6 заголовке на указанный |
-| ip_autottl | изменить TTL в ipv4 заголовке на автоматически определяемый по шаблону autottl `delta,min-max`. При невозможности определения TTL берется ip_ttl, если есть. Иначе TTL не меняется. |
-| ip6_autottl | изменить HL в ipv6 заголовке на автоматически определяемый по шаблону autottl `delta,min-max`. При невозможности определения HL берется ip6_ttl, если есть. Иначе HL не меняется. |
-| ip6_hopbyhop | вставить extension header "hop-by-hop options". по умолчанию данные - 6 нулей, но можно задать hex строку с данными. длина должна быть 6+N*8 |
-| ip6_hopbyhop2 | вставить второй extension header "hop-by-hop options" |
-| ip6_destopt | вставить extension header "destination options". по умолчанию данные - 6 нулей, но можно задать hex строку с данными. длина должна быть 6+N*8 |
-| ip6_destopt2 | вставить второй extension header "destination options" |
-| ip6_routing | вставить extension header "routing options". по умолчанию данные - 6 нулей, но можно задать hex строку с данными. длина должна быть 6+N*8 |
-| ip6_ah | вставить extension header "authentication header". по умолчанию данные - 2 нуля и 4 случайных байта, но можно задать hex строку с данными. длина должна быть 6+N*4 |
-| tcp_seq | положительное или отрицательное смещение sequence |
-| tcp_ack | положительное или отрицательное смещение ack sequence |
-| tcp_ts | положительное или отрицательное смещение timestamp. работает только если уже есть timestamp option |
-| tcp_md5 | добавить MD5 header, если его еще нет. по умолчанию - случайные байты, но можно задать hex string длиной 16 байт |
-| tcp_flags_set | установить флаги TCP. флаги представлены списком через зяпятую : FIN,SYN,RST,PUSH,ACK,FIN,URG,ECE,CWR |
-| tcp_flags_unset | снять флаги TCP. аналогично tcp_flags_set |
-| tcp_ts_up | поднять tcp timestamp опцию в самое начало, если она есть |
-| fool | имя кастомной функции фулинга. она берет диссект и таблицу fooling_options |
+| Поле | Описание |
+| :-------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| ip_ttl | изменить TTL в ipv4 заголовке на указанный |
+| ip6_ttl | изменить TTL (HL) в ipv6 заголовке на указанный |
+| ip_autottl | изменить TTL в ipv4 заголовке на автоматически определяемый по шаблону autottl `delta,min-max`. При невозможности определения TTL берется ip_ttl, если есть. Иначе TTL не меняется. |
+| ip6_autottl | изменить HL в ipv6 заголовке на автоматически определяемый по шаблону autottl `delta,min-max`. При невозможности определения HL берется ip6_ttl, если есть. Иначе HL не меняется. |
+| ip6_hopbyhop | вставить extension header "hop-by-hop options". по умолчанию данные - 6 нулей, но можно задать hex строку с данными. длина должна быть 6+N*8 |
+| ip6_hopbyhop2 | вставить второй extension header "hop-by-hop options" |
+| ip6_destopt | вставить extension header "destination options". по умолчанию данные - 6 нулей, но можно задать hex строку с данными. длина должна быть 6+N*8 |
+| ip6_destopt2 | вставить второй extension header "destination options" |
+| ip6_routing | вставить extension header "routing options". по умолчанию данные - 6 нулей, но можно задать hex строку с данными. длина должна быть 6+N*8 |
+| ip6_ah | вставить extension header "authentication header". по умолчанию данные - 2 нуля и 4 случайных байта, но можно задать hex строку с данными. длина должна быть 6+N*4 |
+| tcp_seq | положительное или отрицательное смещение sequence |
+| tcp_ack | положительное или отрицательное смещение ack sequence |
+| tcp_ts | положительное или отрицательное смещение timestamp. работает только если уже есть timestamp option |
+| tcp_md5 | добавить MD5 header, если его еще нет. по умолчанию - случайные байты, но можно задать hex string длиной 16 байт |
+| tcp_flags_set | установить флаги TCP. флаги представлены списком через зяпятую : FIN,SYN,RST,PUSH,ACK,FIN,URG,ECE,CWR |
+| tcp_flags_unset | снять флаги TCP. аналогично tcp_flags_set |
+| tcp_ts_up | поднять tcp timestamp опцию в самое начало, если она есть |
+| fool | имя кастомной функции фулинга. она берет диссект и таблицу fooling_options |
ipv6 extension headers добавляются в следующем порядке:
@@ -2408,13 +2657,13 @@ tcp_ts_up дублирует старое поведение - двигает ti
для которых существуют свои специфические опции.
**ipfrag_options**
-| Поле | Описание |
-|:------|:---------|
-| ipfrag | имя функции фрагментатора. если нет, использовать ipfrag2. фрагментатор возвращает массив диссектов - фрагментов |
-| ipfrag_disorder | отправить фрагменты в обратном порядке |
-| ipfrag_pos_udp | (фрагментатор ipfrag2) позиция фрагментации udp. должна быть кратна 8, по умолчанию 8 |
-| ipfrag_pos_tcp | (фрагментатор ipfrag2) позиция фрагментации tcp. должна быть кратна 8, по умолчанию 32 |
-| ipfrag_next | (фрагментатор ipfrag2) тип следующего протокола в "fragment" extension header второго фрагмента |
+| Поле | Описание |
+| :-------------- | :--------------------------------------------------------------------------------------------------------------- |
+| ipfrag | имя функции фрагментатора. если нет, использовать ipfrag2. фрагментатор возвращает массив диссектов - фрагментов |
+| ipfrag_disorder | отправить фрагменты в обратном порядке |
+| ipfrag_pos_udp | (фрагментатор ipfrag2) позиция фрагментации udp. должна быть кратна 8, по умолчанию 8 |
+| ipfrag_pos_tcp | (фрагментатор ipfrag2) позиция фрагментации tcp. должна быть кратна 8, по умолчанию 32 |
+| ipfrag_next | (фрагментатор ipfrag2) тип следующего протокола в "fragment" extension header второго фрагмента |
### apply_ip_id
@@ -2677,18 +2926,18 @@ nfqws2 ничего не знает о том, что нужно `--lua-desync`
Фильтр по направлению. В большинстве функций, использующих фильтр по направлению, значение по умолчанию - "out", но есть и те, где по умолчанию "any". Фильтр по направлению можно реализовать и средствами C кода [`--in-range` и `--out-range`](#внутрипрофильные-фильтры).
**standard direction**
-| Поле | Описание |
-|:------|:---------|
-| dir | in - входящее направление
out - исходящее направление
any - любое направление |
+| Поле | Описание |
+| :--- | :----------------------------------------------------------------------------------- |
+| dir | in - входящее направление
out - исходящее направление
any - любое направление |
### standard payload
Фильтр по пейлоаду берет список типов пейлоада. Список известных типов пейлоада можно получить из help текста nfqws2. Все пустые пакеты имеют пейлоад empty, неизвестные - unknown. Особые значения - all и known. all означает любой пейлоад, known - не unknown и не empty.
**standard payload**
-| Поле | Описание |
-|:------|:---------|
-| payload | список допустимых пейлоадов через запятую. ~ в начале означает инверсию |
+| Поле | Описание |
+| :------ | :---------------------------------------------------------------------- |
+| payload | список допустимых пейлоадов через запятую. ~ в начале означает инверсию |
## Базовые функции
@@ -3789,37 +4038,37 @@ nfqws2 может работать и самостоятельно без скр
Сам nfqws2 ничего не знает о скриптах запуска и файле config, не принимает ссылку на него в командной строке.
-| Параметр | Назначение |
-|:---------|:-----------|
-| TMPDIR | временная директория вместо /tmp . полезно, если на устройстве мало памяти и tmpfs в /tmp не хватает |
-| WS_USER | пользователь, под которым запускается nfqws2. по умолчанию используется автоматическое значение в зависимости от ОС |
-| FWTYPE | тип фаервола - iptables, nftables, ipfw. по умолчанию определяется автоматически |
-| SET_MAXELEM | максимальное количество записей в создаваемых ipset-ах |
-| IPSET_OPT | опции ipset от iptables |
-| IPSET_HOOK | скрипт, который получает имя ipset в $1, выдает в stdout список ip, и они добавляются в ipset |
-| IP2NET_OPT4
IP2NET_OPT6 | настройки ip2net для скриптов получения ip листов |
-| MDIG_THREADS | количество потоков mdig. используется при ресолвинге хостлистов |
-| AUTOHOSTLIST_INCOMING_MAXSEQ
AUTOHOSTLIST_RETRANS_MAXSEQ
AUTOHOSTLIST_RETRANS_THRESHOLD
AUTOHOSTLIST_RETRANS_RESET
AUTOHOSTLIST_FAIL_THRESHOLD
AUTOHOSTLIST_FAIL_TIME
AUTOHOSTLIST_UDP_IN
AUTOHOSTLIST_UDP_OUT | параметры [автохостлистов](#детектор-неудач-автохостлистов) |
-| AUTOHOSTLIST_DEBUGLOG | включение autohostlist debug log. лог пишется в `ipset/zapret-hosts-auto-debug.log` |
-| GZIP_LISTS | применять ли сжатие gzip для генерируемых хост и ip листов |
-| DESYNC_MARK | марк-бит для предотвращения зацикливания |
-| DESYNC_MARK_POSTNAT | марк-бит для пометки потоков, идущих по схеме POSTNAT |
-| FILTER_MARK | если задан, перехватывает пакеты только с этим битом mark. Полезно для организации особых фильтров, например, по ip источника локальной сети. |
-| POSTNAT | использовать режим перехвата после NAT на nftables. По умолчанию - 1. На iptables перехват всегда до NAT. |
-| NFQWS2_ENABLE | включение стандартного режима nfqws2 |
-| NFQWS2_PORTS_TCP
NFQWS2_PORTS_UDP | порты перехвата для стандартного режима nfqws2 |
-| NFQWS2_TCP_PKT_OUT
NFQWS2_TCP_PKT_IN
NFQWS2_UDP_PKT_OUT
NFQWS2_UDP_PKT_IN | ограничители connbytes по tcp/udp и направлению для стандартного режима nfqws2 |
-| NFQWS2_PORTS_TCP_KEEPALIVE
NFQWS2_PORTS_UDP_KEEPALIVE | список портов tcp/udp, для которых выключается ограничитель connbytes по исходящему направлению для стандартного режима nfqws2 |
-| NFQWS2_OPT | параметры командной строки стандартного режима nfqws2 |
-| MODE_FILTER | режим фильтрации : none,ipset,hostlist,autohostlist |
-| FLOWOFFLOAD | режим offload : donttouch,none,software,hardware |
-| OPENWRT_LAN
OPENWRT_WAN4
OPENWRT_WAN6 | список через пробел lan и wan интерфейсов для ipv4 и ipv6 в OpenWRT. НЕ ИНТЕРФЕЙСЫ Linux, ИНТЕРФЕЙСЫ netifd ! по умолчанию "lan" и "wan" |
-| IFACE_LAN
IFACE_WAN
IFACE_WAN6 | список через проблем lan и wan интерфейсов для ipv4 и ipv6 в классическом Linux. ИНТЕРФЕЙСЫ Linux ! |
-| INIT_APPLY_FW | должны ли применять [стартовые скрипты](#стартовые-скрипты) правила firewall |
-| INIT_FW_PRE_UP_HOOK
INIT_FW_POST_UP_HOOK
INIT_FW_PRE_DOWN_HOOK
INIT_FW_POST_DOWN_HOOK | хук-скрипты, вызываемые до, после поднятия и до, после опускания firewall |
-| DISABLE_IPV4
DISABLE_IPV6
| отключить версии ip протокола |
-| FILTER_TTL_EXPIRED_ICMP | фильтровать "time exceeded" в ответ на пакеты, принадлежащие потокам, прошедшим через zapret |
-| GETLIST | [скрипт внутри ipset](#система-ведения-листов), вызываемый из `ipset/get_config.sh` . если не указано - `ipset/get_ipban.sh` |
+| Параметр | Назначение |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- |
+| TMPDIR | временная директория вместо /tmp . полезно, если на устройстве мало памяти и tmpfs в /tmp не хватает |
+| WS_USER | пользователь, под которым запускается nfqws2. по умолчанию используется автоматическое значение в зависимости от ОС |
+| FWTYPE | тип фаервола - iptables, nftables, ipfw. по умолчанию определяется автоматически |
+| SET_MAXELEM | максимальное количество записей в создаваемых ipset-ах |
+| IPSET_OPT | опции ipset от iptables |
+| IPSET_HOOK | скрипт, который получает имя ipset в $1, выдает в stdout список ip, и они добавляются в ipset |
+| IP2NET_OPT4
IP2NET_OPT6 | настройки ip2net для скриптов получения ip листов |
+| MDIG_THREADS | количество потоков mdig. используется при ресолвинге хостлистов |
+| AUTOHOSTLIST_INCOMING_MAXSEQ
AUTOHOSTLIST_RETRANS_MAXSEQ
AUTOHOSTLIST_RETRANS_THRESHOLD
AUTOHOSTLIST_RETRANS_RESET
AUTOHOSTLIST_FAIL_THRESHOLD
AUTOHOSTLIST_FAIL_TIME
AUTOHOSTLIST_UDP_IN
AUTOHOSTLIST_UDP_OUT | параметры [автохостлистов](#детектор-неудач-автохостлистов) |
+| AUTOHOSTLIST_DEBUGLOG | включение autohostlist debug log. лог пишется в `ipset/zapret-hosts-auto-debug.log` |
+| GZIP_LISTS | применять ли сжатие gzip для генерируемых хост и ip листов |
+| DESYNC_MARK | марк-бит для предотвращения зацикливания |
+| DESYNC_MARK_POSTNAT | марк-бит для пометки потоков, идущих по схеме POSTNAT |
+| FILTER_MARK | если задан, перехватывает пакеты только с этим битом mark. Полезно для организации особых фильтров, например, по ip источника локальной сети. |
+| POSTNAT | использовать режим перехвата после NAT на nftables. По умолчанию - 1. На iptables перехват всегда до NAT. |
+| NFQWS2_ENABLE | включение стандартного режима nfqws2 |
+| NFQWS2_PORTS_TCP
NFQWS2_PORTS_UDP | порты перехвата для стандартного режима nfqws2 |
+| NFQWS2_TCP_PKT_OUT
NFQWS2_TCP_PKT_IN
NFQWS2_UDP_PKT_OUT
NFQWS2_UDP_PKT_IN | ограничители connbytes по tcp/udp и направлению для стандартного режима nfqws2 |
+| NFQWS2_PORTS_TCP_KEEPALIVE
NFQWS2_PORTS_UDP_KEEPALIVE | список портов tcp/udp, для которых выключается ограничитель connbytes по исходящему направлению для стандартного режима nfqws2 |
+| NFQWS2_OPT | параметры командной строки стандартного режима nfqws2 |
+| MODE_FILTER | режим фильтрации : none,ipset,hostlist,autohostlist |
+| FLOWOFFLOAD | режим offload : donttouch,none,software,hardware |
+| OPENWRT_LAN
OPENWRT_WAN4
OPENWRT_WAN6 | список через пробел lan и wan интерфейсов для ipv4 и ipv6 в OpenWRT. НЕ ИНТЕРФЕЙСЫ Linux, ИНТЕРФЕЙСЫ netifd ! по умолчанию "lan" и "wan" |
+| IFACE_LAN
IFACE_WAN
IFACE_WAN6 | список через проблем lan и wan интерфейсов для ipv4 и ipv6 в классическом Linux. ИНТЕРФЕЙСЫ Linux ! |
+| INIT_APPLY_FW | должны ли применять [стартовые скрипты](#стартовые-скрипты) правила firewall |
+| INIT_FW_PRE_UP_HOOK
INIT_FW_POST_UP_HOOK
INIT_FW_PRE_DOWN_HOOK
INIT_FW_POST_DOWN_HOOK | хук-скрипты, вызываемые до, после поднятия и до, после опускания firewall |
+| DISABLE_IPV4
DISABLE_IPV6
| отключить версии ip протокола |
+| FILTER_TTL_EXPIRED_ICMP | фильтровать "time exceeded" в ответ на пакеты, принадлежащие потокам, прошедшим через zapret |
+| GETLIST | [скрипт внутри ipset](#система-ведения-листов), вызываемый из `ipset/get_config.sh` . если не указано - `ipset/get_ipban.sh` |
* По стандартным режимом nfqws2 понимается то, что запускается с параметрами `NFQWS2_OPT` при включении `NFQWS2_ENABLE`. В противовес [custom скриптам](#custom-скрипты), откуда могут запускаться нестандартные, кастомные, инстансы nfqws2.
* netifd интерфейсы - это то, что видно в `/etc/config/network` или в Luci, и что берет команда ifstatus. Не являются интерфейсами Linux. Интерфейсы Linux указываются в параметре device в определении интерфейса и видны по команде `ip link`. Например, интерфейс netifd - "lan", интерфейс Linux - "br-lan". В OPENWRT_LAN надо вписывать "lan", а не "br-lan", иначе это работать не будет.
@@ -3846,13 +4095,13 @@ ip листы разделяются на ipv4 и ipv6. ipv6 листы имею
В зависимости от режима хостлисты могут ресолвиться в ip листы через [mdig](#mdig) или применяться как есть. Если хостлисты применяются как есть в nfqws2, учитываются только имена доменов, а IP адреса и подсети - нет.
-| Хостлист | Тип | Назначение | ip листы |
-|:---------|:-----|:-----------|:--------|
-| zapret-hosts-user.txt | пользовательский | включающий | zapret-ip-user.txt
zapret-ip-user6.txt |
-| zapret-hosts-user-exclude.txt | пользовательский | исключающий | zapret-ip-exclude.txt
zapret-ip-exclude6.txt |
-| zapret-hosts-user-ipban.txt | пользовательский | заворот трафика | zapret-ip-user-ipban.txt
zapret-ip-user-ipban6.txt |
-| -- | генерируемый | заворот трафика | zapret-ip-ipban.txt
zapret-ip-ipban6.txt |
-| zapret-hosts.txt | генерируемый | включающий | zapret-ip.txt
zapret-ip6.txt |
+| Хостлист | Тип | Назначение | ip листы |
+| :---------------------------- | :--------------- | :-------------- | :---------------------------------------------------- |
+| zapret-hosts-user.txt | пользовательский | включающий | zapret-ip-user.txt
zapret-ip-user6.txt |
+| zapret-hosts-user-exclude.txt | пользовательский | исключающий | zapret-ip-exclude.txt
zapret-ip-exclude6.txt |
+| zapret-hosts-user-ipban.txt | пользовательский | заворот трафика | zapret-ip-user-ipban.txt
zapret-ip-user-ipban6.txt |
+| -- | генерируемый | заворот трафика | zapret-ip-ipban.txt
zapret-ip-ipban6.txt |
+| zapret-hosts.txt | генерируемый | включающий | zapret-ip.txt
zapret-ip6.txt |
### Скрипты ipset
@@ -3930,14 +4179,14 @@ IP листы содержат как ipv4, так и ipv6.
Имеются только для Linux и OpenWRT. Вариант для Linux - в `init.d/sysv`, для OpenWRT - в `init.d/openwrt`. Основной исполняемый файл - `zapret2`. Требуемое действие передается в аргументе `$1`. Процедура запуска разделена на запуск демонов - процессов nfqws2, и запуск firewall - выставление правил ip/nf tables.
-| Команда ($1) | Действие |
-|:-------------|:---------|
-| start
stop
restart | запуск/останов/перезапуск демонов и firewall. firewall не запускается, если [INIT_APPLY_FW](#файл-config) не равно 1. На openwrt с fw3 (iptables) firewall запускается отдельно, команды работают только с демонами и не трогают firewall |
-| start_daemons
stop_daemons
restart_daemons | запуск/останов/перезапуск демонов |
-| start_fw
stop_fw
restart_fw | запуск/останов/перезапуск firewall. На openwrt с fw3 (iptables) команды работают, но firewall запускается отдельно через firewall include в `/etc/config/firewall`. Отдельные операции не рекомендованы. |
-| reload_ifsets | (только для nftables) перезагрузка сетов wanif и wanif6 |
-| list_ifsets | (только для nftables) показ wanif, wanif6 и flowtable |
-| list_table | (только для nftables) показ таблицы zapret2 |
+| Команда ($1) | Действие |
+| :----------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| start
stop
restart | запуск/останов/перезапуск демонов и firewall. firewall не запускается, если [INIT_APPLY_FW](#файл-config) не равно 1. На openwrt с fw3 (iptables) firewall запускается отдельно, команды работают только с демонами и не трогают firewall |
+| start_daemons
stop_daemons
restart_daemons | запуск/останов/перезапуск демонов |
+| start_fw
stop_fw
restart_fw | запуск/останов/перезапуск firewall. На openwrt с fw3 (iptables) команды работают, но firewall запускается отдельно через firewall include в `/etc/config/firewall`. Отдельные операции не рекомендованы. |
+| reload_ifsets | (только для nftables) перезагрузка сетов wanif и wanif6 |
+| list_ifsets | (только для nftables) показ wanif, wanif6 и flowtable |
+| list_table | (только для nftables) показ таблицы zapret2 |
sysv вариант предназначен для любых Linux, не являющихся OpenWRT. На системах с различными системами запуска все равно работает sysv скрипт, а прикрутка к системам запуска представляет собой лишь адаптер, его запускающий. На системах с неподдерживаемыми системами запуска и на прошивках вы сами должны знать куда прикрутить "zapret2 start" и "zapret2 stop", чтобы работал автостарт и останов в рамках вашей системы запуска.