Some checks failed
Published content check / validate (push) Failing after 5s
Каждая публикуемая заметка получила callout-шапку со ссылкой на свою страницу wiki.zapret.moe (на самой вики она вырезается транформером RemoveMirrorCallout, видна только на зеркале Obsidian Publish и в Forgejo) и SEO-поле description — 1–2 предложения для meta description обоих сайтов. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3.8 KiB
3.8 KiB
| date | tags | aliases | description | ||||||
|---|---|---|---|---|---|---|---|---|---|
| 2026-01-21 |
|
|
Урок 04 учебника Zapret2: объект desync в Lua, диссект пакетов (dis.ip, dis.tcp, payload), reconstruct, отладка через pktdebug и standard args. |
[!mirror] Резервное зеркало Актуальная версия этой страницы — на основной вики: wiki.zapret.moe/Zapret/manual/zapret2_04
Zapret2 для новичков — 04: dissect/reconstruct и что такое desync
Цель: научиться “читать” то, что видит Lua‑функция, и понимать, откуда берутся поля.
1) desync — главный объект, который получает Lua
Каждый --lua-desync=... вызывает Lua‑функцию вида:
function something(ctx, desync)
...
end
desync — это таблица, в которой есть:
desync.dis— текущий диссект (структура IP/TCP/UDP/payload)desync.arg— аргументы текущего инстанса (все строки/флаги)desync.l7payload/desync.l7proto— распознанные типыdesync.track— conntrack‑состояние (может быть nil)desync.reasm_data/desync.decrypt_data— если сработал механизм сборки- флаги про replay (например
desync.replay,desync.replay_piece, …)
2) Что такое desync.dis (диссект)
Упрощённо:
desync.dis.ipилиdesync.dis.ip6— IP заголовокdesync.dis.tcpилиdesync.dis.udp— транспортный заголовокdesync.dis.payload— байты полезной нагрузки (string)
Для TCP полезно знать, что:
desync.dis.tcp.th_seq,th_ack,th_flags,th_win,th_urp— основные поляdesync.dis.tcp.options— массив tcp‑опций (timestamp, md5, nop, …)
3) Почему “диссект” удобнее, чем raw
С raw пакетами неудобно работать:
- нужно помнить смещения полей
- легко ошибиться
- сложно корректно пересчитать checksum
Поэтому zapret2 большую часть модификаций делает так:
- разобрать → диссект
- поменять поля в диссекте
- собрать raw обратно (reconstruct)
4) Как debuggить desync
Есть готовые функции (в lua/zapret-lib.lua):
pktdebug— печатает весьdesync(большой вывод)argdebug— печатает толькоdesync.argposdebug— печатает счётчики conntrack и наличиеreasm/decrypt/replay
Минимальные “учебные” вставки:
--lua-desync=argdebug
--lua-desync=posdebug
5) Что такое “standard args”
Многие стратегии (fake, multisplit, multidisorder) принимают одинаковые “блоки” аргументов:
- direction (dir=in/out/any)
- payload (payload=...)
- fooling (ttl, md5, flags, badsum, …)
- ipid (ip_id=seq/rnd/…)
- rawsend (repeats/ifout/fwmark)
- ipfrag (ipfrag_pos_tcp/…)
Почему так сделано:
- проще комбинировать техники,
- один и тот же механизм отправки/реконструкции применяет эти опции одинаково.
6) Что читать дальше
[[Zapret2 - 05 - Payload types, reasm/replay и маркеры]][[Zapret2 - lua-desync]]