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-15 15:52:43 +03:00
parent 8caaf85b36
commit 901ffdfe5a

View File

@@ -723,6 +723,24 @@ ipcache представляет собой структуру в памяти
* **SIGUSR1** выводит содержимое пула conntrack
* **SIGUSR2** выводит счетчики autohostlist и содержимое пула ipcache
## Отладка
Параметр `--debug` включает вывод отладочных сообщений.
* `--debug=0` выключает вывод
* `--debug`, `--debug=1` вывод на консоль
* `--debug=@<filename>` вывод в файл. размер файла ничем не ограничивается, но файл может быть удален в любой момент, и запись продолжится с чистого листа
* `--debug=syslog` вывод в syslog. чтение зависит от syslog daemon. rsyslog пишет файлы в /var/log. busybox logd читается через logread.
* `--debug=android` вывод в android log. чтение через logcat. доступно только в версиях, собранных в Android NDK
Умение обращаться с `--debug` логом совершенно необходимо для отладки настроек и тем более для написания собственного LUA кода.
Все сообщения об ошибках (DLOG_ERR) и особо важные сообщения (DLOG_CONDUP) дублируются на консоли вне зависимости от log target.
Сообщения об ошибках выводятся в stderr.
Параметр `--dry-run` позволяет протестировать корректность опций командной строки и доступность используемых файлов под сброшенными привилегиями.
`--dry-run` не инициализирует движок LUA, и поэтому не может обнаружить синтаксические ошибки LUA.
## Песочница
В целях безопасности nfqws2 после инициализации сбрасывает свои привилегии.
@@ -734,7 +752,7 @@ BSD :
Linux :
* Меняется UID/GID на указанные в параметрах `--user`, `--uid`. По умолчанию на 0x7FFFFFFF.
* Сбрасываются capabilities до cap_net_raw, cap_net_admin (требуется для NFQUEUE). Сбрасывается bounding set до нуля.
* Выставляется признак NO_NEW_PRIVS, чтобы не работали suid биты и caps на файлах. Если ядро старее 3.5, NO_NEW_PRIVS не поддерживается. В этом случае выводится предупреждение, но выполнение не прекращается.
* Выставляется признак NO_NEW_PRIVS, чтобы не работали suid биты и caps на файлах. Если ядро старее 3.5, NO_NEW_PRIVS не поддерживается. В этом случае выводится предупреждение, выполнение не прекращается.
* Включается seccomp фильтр, запрещающий exec и ряд файловых операций - чтение содержимого каталогов, создание/удаление каталогов, создание специальных файлов (линки, девайсы), chmod, chown, посылание сигналов (kill), ptrace.
В случае нарушения процесс аварийно завершается. Если ядро не поддерживает seccomp, выводится предупреждение, но выполнение не прекращается.
@@ -1304,3 +1322,138 @@ mss дублируется в поле `desync.tcp_mss` независимо о
| IPTOS_DSCP_MASK | number | битовая маска поля ip_tos, соответствующая DSCP | 0xFC |
| IP6F_MORE_FRAG | number | бит "More fragment" поля ip6f_offlg из ipv6 fragment header | 0x0001 |
| 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 |
## C функции
### Логгинг
```
function DLOG(string)
function DLOG_ERR(string)
function DLOG_CONDUP(string)
```
Функции выводят строку с добавлением EOL в --debug лог.
* DLOG - обычный вывод
* DLOG_CONDUP - обычный вывод + вывод на консоль, если включено логирование в файл или syslog
* DLOG_ERR - вывод в stderr + на консоль
### Конвертация IP
```
function ntop(raw_ip)
function pton(string_ip)
```
* ntop конвертирует строку с байтами ipv4 или ipv6 адреса в строковое представление. версия IP определяется по размеру raw_ip - 4 или 16 байт. При несоответствии размера возвращается nil.
* pton конвертирует строковое представление ipv4 или ipv6 адреса в raw_ip. Если строковое представление не является корректным ipv4 или ipv6 адресом, возвращается nil.
### Битовые операции
LUA 5.1, на котором основан luajit, не имеет встроенных битовых операций. Luajit имеет встроенный модуль bitop.
LUA 5.3 имеет встроенные битовые операции, но не имеет встроенного модуля bitop. Он может быть подгружен,
но только если не использована статическая компиляция и если модуль установлен. nfqws2 на github собирается статически.
При работе с полями сетевых пакетов без битовых операций никуда.
Битовые операции и сдвиги обычно реализуются одной машинной командой. Для процессора это родные операции.
Заменять их конструкциями, основанных на математике с плавающей точкой неразумно (возведение в степень, деление, округление и тд),
особенно в условиях частого отсутствия FPU на роутерах и других embedded устройствах.
Чтобы не зависеть от всей этой неразберихи, в nfqws2 выставляется свой собственный набор битовых функций и функций сдвига,
который не зависит от типа движка LUA и его версии. Все типы битовых операций работают с беззнаковыми числами от 8 до 32 бит.
При передаче отрицательных чисел они интерпретируются в дополнительном коде. Например, в 32 битах -2 становится 0xFFFFFFFE, в 8 битах - 0xFE.
Большая разрядность не поддерживается, поскольку возникают несовместимости между LUA 5.3+ и более старыми версиями.
Только в LUA 5.3 реализова тип integer 64 bit. В более старых исползьзуется формат плавающей точки - double с мантиссой 53 бит.
Стандартные операции сдвига и побитовые логические операции :
```
function bitlshift(u32, bits)
function bitrshift(u32, bits)
function bitand(u32_1, u32_2, ...., u32_N)
function bitor(u32_1, u32_2, ...., u32_N)
function bitxor(u32_1, u32_2, ...., u32_N)
function bitnot(u32)
```
bitand, bitor и bitxor работает с произвольным количеством чисел.
Операции получения и установки отдельных битов :
```
function bitget(u32, bit_from, bit_to)
function bitset(u32, bit_from, bit_to, set)
```
* bitget получает число из диапазона битов u32 с номерами от bit_from до bit_to. нумерация битов с 0.
* bitset записывает число set в диапазон битов u32 с номерами от bit_from до bit_to. нумерация битов с 0. старшие биты set, выходящие за пределы (bit_to-bit_from), игнорируются.
### Операции с беззнаковыми числами
При операциях с числями без знака всегда важна разрядность. От нее зависит результат.
Поэтому все функции имеют в своем названии разрядность. При передаче аргументов, выходящих за пределы разрядности, вызывается error.
```
function u8(raw_string, offset)
function u16(raw_string, offset)
function u24(raw_string, offset)
function u32(raw_string, offset)
```
Эти функции используются для извлечения числовых полей в формате big endian из raw строки.
offset - номер байта от начала raw строки, начиная с 1.
Аналогичные встроенные средства (string.unpack) есть только в LUA 5.3.
```
function bu8(u8)
function bu16(u16)
function bu24(u24)
function bu32(u32)
```
Преобразуют число в raw строку в формате big endian.
Чтобы собрать структуру из числовых полей, можно использовать обычную операцию конкатенации строк `..`.
```
function swap16(u16)
function swap32(u32)
```
Инвертируют порядок следования байт в u16 или u32. Если в вашей структуре порядок байт little endian,
можно использовать uX/buX + swap.
```
function u8add(u8_1, u8_2, ...., u8_N)
function u16add(u16_1, u16_2, ...., u16_N)
function u24add(u24_1, u24_2, ...., u24_N)
function u32add(u32_1, u32_2, ...., u32_N)
```
Функции для сложения произвольного количества беззнаковых чисел указанной разрядности.
Операнды должны вписываться в указанную разрядность, иначе вызывается error.
Перенос старшего разряда игнорируется.
### Целочисленное деление
Встроенное целочисленное деление есть только в LUA 5.3+, где есть тип данных integer.
Чтобы не возиться с округлением, целочисленное деление реализовано C функцией :
```
function divint(dividend, divisor)
```
В этой функции нет ограничения на разрядность. Внутри используется тип int64_t.
В LUA 5.3+ потерь разрядности нет, в более старых - разрядность будет обрезана до размера мантиссы типа double.
### Генерация случайных данных
Функции генерируют raw строку указанного размера , состоящую из случайных байт.
```
function brandom(size)
function brandom_az(size)
function brandom_az09(size)
```
* brandom возвращает байты с 0 до 255
* brandom_az - символы от 'a' до 'z'
* brandom_az09 - символы от 'a' до 'z' и числа от '0' до '9'