From a7a1520b402aa4f93e92c6daf1060466727d9e9c Mon Sep 17 00:00:00 2001 From: bol-van Date: Tue, 16 Dec 2025 19:27:09 +0300 Subject: [PATCH] update docs --- docs/manual.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/manual.md b/docs/manual.md index 8724eea..53d991b 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -1645,6 +1645,18 @@ function reconstruct_dissect(dissect, reconstruct_opts) Возвращает raw_ip. Все чексуммы считаются автоматически. L4 чексуммы портятся, если задан badsum в reconstruct_opts. +Реконструкция диссектов с IP фрагментацией происходит особым образом - с участием как LUA, так и C кода. +LUA код должен подготовить диссект полного пакета, подлежащего фрагментации, но заполнить некоторые поля такими, какими они должны быть во фрагменте. + +* ipv4 : ip.ip_len должен быть рассчитан таким, каким он должен быть во фрагменте. +По ip.ip_len С код определяет размер фрагментированной части. +Поле ip.ip_off должно содержать offset фрагмента и признак IP_MF, если это не последний фрагмент. +* ipv6 : нужно вставить в ip6.exthdr fragment header, в котором заполнить ident, offset и бит IP6F_MORE_FRAG, если это не последний фрагмент. +ip6.ip6_len должен быть рассчитан таким, каким он должен быть во фрагменте. По этой длине C код определяет размер фрагмента. + +Если C код видит признаки необходимости фрагментации, он проверяет корректность рассчитанных длин и смещений, +и если они корректны, после реконструкции сдвигает содержимое raw пакета в буфере реконструкции, чтобы получился фрагмент с нужными данными. + ``` function reconstruct_tcphdr(tcp) function reconstruct_udphdr(udp)