# Zapret2 для новичков — 06: Lua pipeline (инстансы, аргументы, дебаг) Цель: понять, как читается строка `--lua-desync=...`, что такое “инстанс”, как данные переходят между функциями, и как дебажить без хаоса. ## 1) Инстанс: что это Каждая опция `--lua-desync=...` создаёт **инстанс**: - имя функции (например `fake`) - набор аргументов (`desync.arg`) - позиция в профиле (порядок выполнения) Инстансы выполняются **строго по порядку**, в рамках активного профиля. ## 2) Синтаксис аргументов (важная мелочь) Формат: ```text --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) Мини‑рецепт “дебажим стратегию без каши” 1) ограничить профиль по `--payload=...` и `--out-range=...` 2) поставить `--lua-desync=posdebug` первым 3) поставить тестируемую стратегию 4) при необходимости — `argdebug` рядом Так вы увидите: - когда стратегия сработала - на каком payload’е - был ли reasm/replay ## 8) Что читать дальше - `[[fake]]`, `[[multisplit]]`, `[[multidisorder]]` - `[[Zapret2 - Roadmap обучения]]`