Zapret2 для новичков — 06: Lua pipeline (инстансы, аргументы, дебаг)
Цель: понять, как читается строка --lua-desync=..., что такое “инстанс”, как данные переходят между функциями, и как дебажить без хаоса.
1) Инстанс: что это
Каждая опция --lua-desync=... создаёт инстанс:
- имя функции (например
fake) - набор аргументов (
desync.arg) - позиция в профиле (порядок выполнения)
Инстансы выполняются строго по порядку, в рамках активного профиля.
2) Синтаксис аргументов (важная мелочь)
Формат:
--lua-desync=function:arg1[=val1]:arg2[=val2]:flag3:flag4Особенность:
- все значения — строки
- если
=valотсутствует, значение считается пустой строкой""(а это “true” в Lua)
Поэтому “флаги” пишутся как:
:optional,:nodrop,:tcp_ts_up,:ipfrag,:ipfrag_disorder
3) Как стандартные блоки “прикручиваются” к стратегиям
Большинство стратегий не реализуют “отправку” вручную. Они вызывают общий отправщик, который:
- делает deepcopy диссекта при необходимости
- применяет
apply_fooling(TTL/MD5/flags/…) - при необходимости режет payload по MSS
- применяет
ip_idполитику - затем может применить
ipfrag(L3 фрагментацию) - и в конце делает
rawsend
Из-за этого “standard args” работают согласованно и предсказуемо.
4) Вердикт и приоритет
Каждый инстанс возвращает:
PASS(ничего не блокировать)DROP(заблокировать перехваченный пакет)MODIFY(передать изменённый пакет)
Итоговый вердикт по пакету выбирается с приоритетом:
DROP > MODIFY > PASS.
Практический вывод:
- достаточно одного
DROP, чтобы оригинал не ушёл fakeможет отправить “доп. пакет”, но если оригинал не дропнут — он уйдёт
5) Cutoff: как перестать вызываться и сэкономить CPU
В zapret2 есть идея “самоотсечения”:
- инстанс может выключить себя (по направлению)
- или выключить весь Lua профиль (lua cutoff)
Это нужно, чтобы после “критической фазы” (например первых N пакетов) больше не тратить ресурсы на Lua.
6) 3 инструмента дебага (must-have)
argdebug
Печатает desync.arg текущего инстанса.
posdebug
Печатает счётчики conntrack (n/d/b/s/p) и статус reasm/decrypt/replay.
pktdebug
Печатает весь desync (много текста, но иногда незаменимо).
7) Мини‑рецепт “дебажим стратегию без каши”
- ограничить профиль по
--payload=...и--out-range=... - поставить
--lua-desync=posdebugпервым - поставить тестируемую стратегию
- при необходимости —
argdebugрядом
Так вы увидите:
- когда стратегия сработала
- на каком payload’е
- был ли reasm/replay
8) Что читать дальше
[[fake]],[[multisplit]],[[multidisorder]][[Zapret2 - Roadmap обучения]]