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>
98 lines
4.7 KiB
Markdown
98 lines
4.7 KiB
Markdown
---
|
||
date: 2026-01-21
|
||
tags:
|
||
- zapret
|
||
- zapret2
|
||
- payload
|
||
- lua
|
||
- learning
|
||
aliases:
|
||
- Zapret2 учебник 05
|
||
description: "Учебник Zapret2, часть 5: типы payload (http_req, tls_client_hello), сборка reasm_data, replay и маркеры host/midsld для multisplit и multidisorder."
|
||
---
|
||
|
||
> [!mirror] Резервное зеркало
|
||
> Актуальная версия этой страницы — на основной вики: [wiki.zapret.moe/Zapret/manual/zapret2_05](https://wiki.zapret.moe/Zapret/manual/zapret2_05)
|
||
|
||
# Zapret2 для новичков — 05: payload types, reasm/replay и маркеры
|
||
|
||
Цель: понять, как zapret2 отличает `http_req` от `tls_client_hello`, зачем нужен `reasm_data` и почему “маркеры” (host/midsld/…) иногда не работают.
|
||
|
||
## 1) `l7proto` vs `l7payload`
|
||
|
||
Это разные уровни классификации:
|
||
|
||
- `l7proto`: “какой протокол потока” (tls/http/quic/…)
|
||
- `l7payload`: “какой именно тип полезной нагрузки” (http_req, tls_client_hello, quic_initial, …)
|
||
|
||
В CLI это отражается так:
|
||
- `--filter-l7=tls,http,quic` — фильтр протокола потока
|
||
- `--payload=tls_client_hello` — фильтр типов payload внутри профиля
|
||
|
||
## 2) Почему payload важнее для Lua стратегий
|
||
|
||
Многие стратегии должны срабатывать только на “первом важном пакете”:
|
||
- HTTP request (где виден Host)
|
||
- TLS ClientHello (где виден SNI)
|
||
- QUIC Initial (где тоже “есть hello”, но шифрованнее и сложнее)
|
||
|
||
Поэтому фильтрация по payload экономит CPU и делает поведение предсказуемым.
|
||
|
||
## 3) `reasm_data`: когда один payload приходит в нескольких TCP сегментах
|
||
|
||
Иногда полезная нагрузка не помещается в один TCP сегмент (например TLS ClientHello с kyber).
|
||
Тогда zapret2 может собрать несколько сегментов в один “логический payload”:
|
||
|
||
- `desync.reasm_data` — полный собранный блок
|
||
|
||
Ключевой момент:
|
||
- стратегии типа `multisplit`/`multidisorder` работают “умнее”, если видят `reasm_data`: они режут **весь reasm**, а не только текущий кусок.
|
||
|
||
## 4) `replay`: почему пакеты иногда “задерживают и переигрывают”
|
||
|
||
Если нужно сначала накопить части payload (для reasm) или выполнить серию Lua‑инстансов, система может:
|
||
|
||
1) временно задержать часть пакетов
|
||
2) когда готово состояние (`reasm_data`), “переиграть” (replay) эти пакеты
|
||
|
||
Отсюда поля типа:
|
||
- `desync.replay`, `desync.replay_piece`, `desync.replay_piece_count`
|
||
|
||
И поведение:
|
||
- многие стратегии делают основную работу только на `replay_first(...)`, а дальше дропают “повторные” части, потому что уже отправили reasm в нужной форме.
|
||
|
||
## 5) Маркеры: что это и зачем
|
||
|
||
Маркеры — это способ указать позицию “логически”, а не байтовым смещением.
|
||
|
||
Примеры маркеров:
|
||
- `method` (HTTP метод)
|
||
- `host`, `endhost`, `midsld` (позиции внутри Host/SNI домена)
|
||
- `sniext`, `extlen` (TLS структуры)
|
||
|
||
Можно писать:
|
||
- `midsld+1`, `endhost-2`, `-10`, `100`
|
||
|
||
И использовать в:
|
||
- `multisplit:pos=...`
|
||
- `multidisorder:pos=...:seqovl=...`
|
||
|
||
Почему маркер может “не сработать”:
|
||
- payload не распознан (l7payload = unknown)
|
||
- в payload нет нужной структуры (например нет SNI)
|
||
- маркер невалиден для данного payload типа
|
||
|
||
## 6) Мини‑практика: “проверить, распознан ли payload”
|
||
|
||
Добавь:
|
||
```bash
|
||
--lua-desync=luaexec:code="DLOG('l7payload '..tostring(desync.l7payload)..' l7proto '..tostring(desync.l7proto))"
|
||
```
|
||
|
||
И сравни с ожиданиями.
|
||
|
||
## 7) Что читать дальше
|
||
|
||
- `[[Zapret2 - 06 - Lua pipeline: инстансы, args, дебаг]]`
|
||
- `[[multisplit]]` и `[[multidisorder]]` (там маркеры используются в реальной технике)
|
||
|