diff --git a/docs/manual.md b/docs/manual.md index 6f619f1..fb1a56c 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -1944,18 +1944,20 @@ function gettid() | :---------------- | :----- | :-------------------------------------------------------------------------------------------- | | badsum | bool | испортить L4 checksum. посчитать чексумму и сделать xor со случайным значением от 1 до 0xFFFF | | ip6_preserve_next | bool | использовать значения "next" из ip6.exthdr | -| ip6_last_proto | number | если ip6_preserve_next=true, IP протокол последнего exthdr | +| ip6_last_proto | number | если ip6_preserve_next=false, IP протокол последнего exthdr | При сборке ipv6 по умолчанию цепочка ip протоколов в exthdr собирается автоматически. У каждого exthdr есть поле type, поэтому понятно что вписывать в предыдущий exthdr, либо в основной ip6 хедер. next протокол последнего exthdr устанавливатеся как IPPROTO_TCP или IPPROTO_UDP в зависимости от наличия в диссекте таблиц tcp или udp. В большинстве случаев это удобно, поскольку вам при вставлении exthdr не надо реконструировать -всю цепочку next протоколов. За вас это сделает реконструктор диссекта. +всю цепочку next протоколов и не надо заполнять поля next. За вас это сделает реконструктор диссекта. Режим ip6_preserve_next используется, если у вас специальная цель, требующая ручной крафтинг полей next protocol. -В этом случае невозможно автоматически узнать что вы хотите вписать в последний exthdr. Туда вписывается ip6_last_proto, -либо IPPROTO_NONE, если ip6_last_proto не задан. +В этом случае поля next в exthdr и ip6.ip6_nxt оставляются как есть. + +Если вы реконструируете отдельно ipv6 header и не используете вариант ip6_preserve_next, невозможно автоматически узнать что вы хотите вписать в последний exthdr. +Туда вписывается ip6_last_proto, либо IPPROTO_NONE, если ip6_last_proto не задан. badsum вынесен в реконструкцию, поскольку чексуммы tcp и udp считаются на базе всего IP пакета. В сумме участвуют элементы хедера ip/ip6, весь хедер tcp и сам пейлоад.