## Формат `--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-й исключён)
```