## Формат `--out-range` / `--in-range`: ``` --out-range=[(n|a|d|s|b|x)<int>](-|<)[(n|a|d|s|b|x)<int>] ─────────────────────────────────────────── FROM SEPARATOR TO ``` ### Префиксы (режимы счёта): | Префикс | Значение | Что считает | |---------|----------|-------------| | `n` | packet **n**umber | Все пакеты (включая ACK без данных) | | `d` | **d**ata packet | Только пакеты с payload (данными) | | `s` | **s**equence | Относительный TCP sequence number | | `b` | **b**yte count | Количество переданных байт | | `a` | **a**lways | Всегда (без числа) | | `x` | ne**x**t/never | Никогда (без числа) | ### Разделители: | Разделитель | Значение | |-------------|----------| | `-` | **Включает** конечную позицию | | `<` | **Не включает** конечную позицию | --- ## Примеры с `d`: | Значение | Расшифровка | |----------|-------------| | `d1-d10` | С 1-го по 10-й data-пакет **включительно** | | `d1<d10` | С 1-го по 9-й data-пакет (10-й **не** включён) | | `-d10` | С начала (always) по 10-й data-пакет включительно | | `d5-` | С 5-го data-пакета и до конца (бесконечно) | ### Что такое "data packet"? **Data packet** (`d`) — это пакет, содержащий **payload** (данные L7). Пустые ACK, FIN, RST без данных **не считаются**. ```bash Пакет 1: SYN → n=1, d=0 (нет данных) Пакет 2: SYN-ACK → n=2, d=0 Пакет 3: ACK → n=3, d=0 Пакет 4: GET /... → n=4, d=1 ← первый data packet Пакет 5: ACK → n=5, d=1 Пакет 6: Response → n=6, d=2 ← второй data packet ``` --- ## Практический пример: ```bash --out-range=d1-d3 --lua-desync=my_func ``` → `my_func` будет вызываться только для **1-го, 2-го и 3-го исходящих пакетов с данными** в соединении. ```bash --out-range=d10-d10 # ровно 10-й data packet --out-range=d10- # с 10-го и до бесконечности --out-range=-d10 # с начала до 10-го включительно --out-range=d10<d11 # только 10-й (11-й исключён) ```