diff --git a/docs/manual.md b/docs/manual.md index 55b710e..2732149 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -780,8 +780,8 @@ LUA код выполняется с ограниченными правами, * 'n' - номер пакета * 'd' - номер пакета с данными * 'b' - байт-позиция переданных данных -* 's' - tcp: relative sequence начала текущего пакета -* 'p' - tcp: relative sequence верхней границы текущего пакета (s + длина пейлоада) +* 's' - tcp: relative sequence начала текущего пакета. работает в пределах 2 GB +* 'p' - tcp: relative sequence верхней границы текущего пакета (s + длина пейлоада). работает в пределах 2 GB nfqws2 следит за превышением верхней границы счетчиков для всех LUA инстансов. Если во всех инстансах превышена верхняя граница по направлению или инстансы вошли по направлению в состояние cutoff добровольно, @@ -1244,3 +1244,43 @@ mss дублируется в поле `desync.tcp_mss` независимо о Но последний простой вариант не будет работать корректно, а первый - будет, если seq1 ушел от seq2 не более, чем на 2 GB. Большее и не отследить через sequence. Нужно всегда учитывать, что при передаче больших обьемов данных они не могут служить счетчиком. `p*counter` являются 64-битными счетчиками, поэтому у них этой проблемы нет. + +# С интерфейс nfqws2 + +Перед выполнением `--lua-init` C код выставляет базовые константы, блобы и C функции. + +## Базовые константы + +| Поле | Тип | Описание | Примечание | +|:------|:-----|:---------|:-----------| +| 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 | +| 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 |