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

update docs

This commit is contained in:
bol-van
2025-12-24 14:26:51 +03:00
parent 1d14f8b0a4
commit 100fff0461

View File

@@ -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:
</details>
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<br>VERDICT_MODIFY<br>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<br>TCP_KIND_NOOP<br>TCP_KIND_MSS<br>TCP_KIND_SCALE<br>TCP_KIND_SACK_PERM<br>TCP_KIND_SACK<br>TCP_KIND_TS<br>TCP_KIND_MD5<br>TCP_KIND_AO<br>TCP_KIND_FASTOPEN | number | коды типов tcp опций (kinds) | |
| TH_FIN<br>TH_SYN<br>TH_RST<br>TH_PUSH<br>TH_ACK<br>TH_FIN<br>TH_URG<br>TH_ECE<br>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<br>IPPROTO_IPV6<br>IPPROTO_ICMP<br>IPPROTO_TCP<br>IPPROTO_UDP<br>IPPROTO_ICMPV6<br>IPPROTO_HOPOPTS<br>IPPROTO_ROUTING<br>IPPROTO_FRAGMENT<br>IPPROTO_AH<br>IPPROTO_ESP<br>IPPROTO_DSTOPTS<br>IPPROTO_MH<br>IPPROTO_HIP<br>IPPROTO_SHIM6<br>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<br>VERDICT_MODIFY<br>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<br>TCP_KIND_NOOP<br>TCP_KIND_MSS<br>TCP_KIND_SCALE<br>TCP_KIND_SACK_PERM<br>TCP_KIND_SACK<br>TCP_KIND_TS<br>TCP_KIND_MD5<br>TCP_KIND_AO<br>TCP_KIND_FASTOPEN | number | коды типов tcp опций (kinds) | |
| TH_FIN<br>TH_SYN<br>TH_RST<br>TH_PUSH<br>TH_ACK<br>TH_FIN<br>TH_URG<br>TH_ECE<br>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<br>IPPROTO_IPV6<br>IPPROTO_ICMP<br>IPPROTO_TCP<br>IPPROTO_UDP<br>IPPROTO_ICMPV6<br>IPPROTO_HOPOPTS<br>IPPROTO_ROUTING<br>IPPROTO_FRAGMENT<br>IPPROTO_AH<br>IPPROTO_ESP<br>IPPROTO_DSTOPTS<br>IPPROTO_MH<br>IPPROTO_HIP<br>IPPROTO_SHIM6<br>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<br>seq - последовательное<br>rnd - случайное<br>zero - ноль<br>none - не менять |
| ip_id_conn | запоминать последнее сгенерированное значение seq и начинать с него в следующем пакете. не работает без desync.track |
| Поле | Описание |
| :--------- | :---------------------------------------------------------------------------------------------------------------------------- |
| ip_id | режим назначения ip_id : seq, rnd, zero, none<br>seq - последовательное<br>rnd - случайное<br>zero - ноль<br>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 - входящее направление<br> out - исходящее направление<br>any - любое направление |
| Поле | Описание |
| :--- | :----------------------------------------------------------------------------------- |
| dir | in - входящее направление<br> out - исходящее направление<br>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<br>IP2NET_OPT6 | настройки ip2net для скриптов получения ip листов |
| MDIG_THREADS | количество потоков mdig. используется при ресолвинге хостлистов |
| AUTOHOSTLIST_INCOMING_MAXSEQ<br>AUTOHOSTLIST_RETRANS_MAXSEQ<br>AUTOHOSTLIST_RETRANS_THRESHOLD<br>AUTOHOSTLIST_RETRANS_RESET<br>AUTOHOSTLIST_FAIL_THRESHOLD<br>AUTOHOSTLIST_FAIL_TIME<br>AUTOHOSTLIST_UDP_IN<br>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<br>NFQWS2_PORTS_UDP | порты перехвата для стандартного режима nfqws2 |
| NFQWS2_TCP_PKT_OUT<br>NFQWS2_TCP_PKT_IN<br>NFQWS2_UDP_PKT_OUT<br>NFQWS2_UDP_PKT_IN | ограничители connbytes по tcp/udp и направлению для стандартного режима nfqws2 |
| NFQWS2_PORTS_TCP_KEEPALIVE<br>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<br>OPENWRT_WAN4<br>OPENWRT_WAN6 | список через пробел lan и wan интерфейсов для ipv4 и ipv6 в OpenWRT. НЕ ИНТЕРФЕЙСЫ Linux, ИНТЕРФЕЙСЫ netifd ! по умолчанию "lan" и "wan" |
| IFACE_LAN<br>IFACE_WAN<br>IFACE_WAN6 | список через проблем lan и wan интерфейсов для ipv4 и ipv6 в классическом Linux. ИНТЕРФЕЙСЫ Linux ! |
| INIT_APPLY_FW | должны ли применять [стартовые скрипты](#стартовые-скрипты) правила firewall |
| INIT_FW_PRE_UP_HOOK<br>INIT_FW_POST_UP_HOOK<br>INIT_FW_PRE_DOWN_HOOK<br>INIT_FW_POST_DOWN_HOOK | хук-скрипты, вызываемые до, после поднятия и до, после опускания firewall |
| DISABLE_IPV4<br>DISABLE_IPV6<br> | отключить версии 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<br>IP2NET_OPT6 | настройки ip2net для скриптов получения ip листов |
| MDIG_THREADS | количество потоков mdig. используется при ресолвинге хостлистов |
| AUTOHOSTLIST_INCOMING_MAXSEQ<br>AUTOHOSTLIST_RETRANS_MAXSEQ<br>AUTOHOSTLIST_RETRANS_THRESHOLD<br>AUTOHOSTLIST_RETRANS_RESET<br>AUTOHOSTLIST_FAIL_THRESHOLD<br>AUTOHOSTLIST_FAIL_TIME<br>AUTOHOSTLIST_UDP_IN<br>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<br>NFQWS2_PORTS_UDP | порты перехвата для стандартного режима nfqws2 |
| NFQWS2_TCP_PKT_OUT<br>NFQWS2_TCP_PKT_IN<br>NFQWS2_UDP_PKT_OUT<br>NFQWS2_UDP_PKT_IN | ограничители connbytes по tcp/udp и направлению для стандартного режима nfqws2 |
| NFQWS2_PORTS_TCP_KEEPALIVE<br>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<br>OPENWRT_WAN4<br>OPENWRT_WAN6 | список через пробел lan и wan интерфейсов для ipv4 и ipv6 в OpenWRT. НЕ ИНТЕРФЕЙСЫ Linux, ИНТЕРФЕЙСЫ netifd ! по умолчанию "lan" и "wan" |
| IFACE_LAN<br>IFACE_WAN<br>IFACE_WAN6 | список через проблем lan и wan интерфейсов для ipv4 и ipv6 в классическом Linux. ИНТЕРФЕЙСЫ Linux ! |
| INIT_APPLY_FW | должны ли применять [стартовые скрипты](#стартовые-скрипты) правила firewall |
| INIT_FW_PRE_UP_HOOK<br>INIT_FW_POST_UP_HOOK<br>INIT_FW_PRE_DOWN_HOOK<br>INIT_FW_POST_DOWN_HOOK | хук-скрипты, вызываемые до, после поднятия и до, после опускания firewall |
| DISABLE_IPV4<br>DISABLE_IPV6<br> | отключить версии 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<br>zapret-ip-user6.txt |
| zapret-hosts-user-exclude.txt | пользовательский | исключающий | zapret-ip-exclude.txt<br>zapret-ip-exclude6.txt |
| zapret-hosts-user-ipban.txt | пользовательский | заворот трафика | zapret-ip-user-ipban.txt<br>zapret-ip-user-ipban6.txt |
| -- | генерируемый | заворот трафика | zapret-ip-ipban.txt<br>zapret-ip-ipban6.txt |
| zapret-hosts.txt | генерируемый | включающий | zapret-ip.txt<br>zapret-ip6.txt |
| Хостлист | Тип | Назначение | ip листы |
| :---------------------------- | :--------------- | :-------------- | :---------------------------------------------------- |
| zapret-hosts-user.txt | пользовательский | включающий | zapret-ip-user.txt<br>zapret-ip-user6.txt |
| zapret-hosts-user-exclude.txt | пользовательский | исключающий | zapret-ip-exclude.txt<br>zapret-ip-exclude6.txt |
| zapret-hosts-user-ipban.txt | пользовательский | заворот трафика | zapret-ip-user-ipban.txt<br>zapret-ip-user-ipban6.txt |
| -- | генерируемый | заворот трафика | zapret-ip-ipban.txt<br>zapret-ip-ipban6.txt |
| zapret-hosts.txt | генерируемый | включающий | zapret-ip.txt<br>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<br>stop<br>restart | запуск/останов/перезапуск демонов и firewall. firewall не запускается, если [INIT_APPLY_FW](#файл-config) не равно 1. На openwrt с fw3 (iptables) firewall запускается отдельно, команды работают только с демонами и не трогают firewall |
| start_daemons<br>stop_daemons<br>restart_daemons | запуск/останов/перезапуск демонов |
| start_fw<br>stop_fw<br>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<br>stop<br>restart | запуск/останов/перезапуск демонов и firewall. firewall не запускается, если [INIT_APPLY_FW](#файл-config) не равно 1. На openwrt с fw3 (iptables) firewall запускается отдельно, команды работают только с демонами и не трогают firewall |
| start_daemons<br>stop_daemons<br>restart_daemons | запуск/останов/перезапуск демонов |
| start_fw<br>stop_fw<br>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", чтобы работал автостарт и останов в рамках вашей системы запуска.