From 653ed92cf8f58de2e643fc79f7d3d9bdf20b1713 Mon Sep 17 00:00:00 2001 From: bol-van Date: Sun, 14 Dec 2025 21:38:45 +0300 Subject: [PATCH] update docs --- docs/changes.txt | 1 + docs/manual.md | 68 ++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 61 insertions(+), 8 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 83269c4..0f6ddb1 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -105,3 +105,4 @@ v0.7.2 * zapret-lib: fix broken is_retransmission() * zapret-auto: add success detector logic * nfqws2: clean lua cutoff on profile change +* zapret-auto: separate hostkey function diff --git a/docs/manual.md b/docs/manual.md index e1fe641..4034e0c 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -1091,12 +1091,12 @@ desync: | replay_piece | number | номер проигрываемой части | нумерация с 1 | | replay_piece_count | number | количество проигрываемых частей| | | replay_piece_last | bool | последняя проигрываемая часть | | -| l7payload | string | тип пейлоада текущего пакета или группы пакетов | если неизвестно - unknown | +| 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 | +| tcp_mss | number | MSS противоположного конца tcp соединения | присутствует всегда, только для tcp | | track | table | данные, привязанные к записи conntrack | только если есть conntrack, может не быть | | arg | table | все аргументы инстанса и их значения | подстановки % и # уже замещены | | dis | table | диссект текущего пакета | | @@ -1117,7 +1117,7 @@ ipv6 extension headers и tcp options представляются в форме **ip** | Поле | Описание | -|:------|:-----| +|:------|:---------| | ip_v | версия ip - 4 | | ip_hl | длина ip заголовка в блоках по 4 байта. 5 без ip options. | | ip_tos | type of service. содержит DSCP | @@ -1133,7 +1133,7 @@ ipv6 extension headers и tcp 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) | @@ -1144,14 +1144,14 @@ ipv6 extension headers и tcp options представляются в форме **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 | данные без первых двух байтов - типа и длины | **udp** | Поле | Описание | -|:------|:-----| +|:------|:---------| | uh_sport | порт источника | | uh_dport | порт приемника | | uh_ulen | длина udp - header UDP_BASE_LEN (8) + длина пейлоада | @@ -1159,7 +1159,7 @@ ipv6 extension headers и tcp options представляются в форме **tcp** | Поле | Описание | -|:------|:-----| +|:------|:---------| | th_sport | порт источника | | th_dport | порт приемника | | th_x2 | зарезервированное поле. используется для расширенных tcp flags | @@ -1174,10 +1174,62 @@ ipv6 extension headers и tcp options представляются в форме **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 | ### Структура track +Таблица track присутствует в desync только, если для текущего пакета была найдена запись в conntrack. +Она может быть не найдена, если процесс nfqws2 не получил SYN или SYN,ACK пакет. +Например, соединение было установлено ранее, чем был запущен nfqws2. Или если вы принудительно выключили conntrack через `--ctrack-disable`. +Весь ваш код должен проверять наличие track прежде, чем обращаться к нему, иначе код будет падать с ошибками. +То же самое верно для опциональных полей track. Проверяйте ваш код с `--ctrack-disable`. + +**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 | + +Таблица track.pos содержит подтаблицы с набором счетчиков по двум направлениям - client и server. +client означает пакеты от клиента, server - пакеты от сервера. +direct and reverse являются просто ссылкам на client и server. Куда указывает direct и reverse зависит +от текущего направления - `desync.outgoing` и серверного режима - `b_server`. +direct всегда указывает на текущее направление, reverse - на противоположное. + +track.pos содержит еще одно поле - `dt`. Время получения пакета в секундах с момента t_start. +Включает дробную часть с высокой точностью. + +Список полей таблицы счетчиков приведен ниже. Подтаблица tcp присутствует только для tcp протокола. + +| Поле | Описание | Примечание | +|:------|:---------|:-----------| +| pcounter | счетчик пакетов | | +| pdcounter | счетчик пакетов с данными | пакеты, у которых размер L4 пейлоада не равен 0 | +| pbcounter | счетчик переданных байт | считаются только размеры пейлоада L4, заголовки - нет | +| tcp.seq0 | начальный sequence соединения | | +| tcp.seq | sequence текущего пакета | | +| tcp.rseq | relative sequence текущего пакета | вычисляется как seq-seq0 | +| 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 передаются от одной стороны соединения другой стороне, чтобы она знала о допустимых параметрах партнера. +При использовани этих полей важно не перепутать сторону. +Если вам нужно узнать какие по размеру пакеты можно отсылать , вам нужно смотреть противоположную сторону - что она может принять. +mss дублируется в поле `desync.tcp_mss` независимо от наличия conntrack. Значение там уже рассчитано на то, что оно будет использовано +для вычисления размера пакета для отсылки. +Если вдруг conntrack нет или mss не был согласован сторонами, выставляется значение по умолчанию - DEFAULT_MSS (1220).