diff --git a/docs/manual.md b/docs/manual.md index 2d459ad..06eb7e7 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -2191,7 +2191,7 @@ delta - это положительная или отрицательная ра * parse_autottl переводит строку вида `,-` в таблицу с идентичными полями. Вызывается error, если формат s неверен. * autottl производит эвристическую догадку о длине в хопах на базе TTL входящих пакетов и вычисляет TTL , учитывая дельту и допустимый диапазон. -Готовый incoming_ttl можно взять из desync. attl имеет формат таблицы, получаемой через parse_autottl. +Готовый incoming_ttl можно взять из desync. attl имеют формат таблицы, получаемой через parse_autottl. ## Операции с диссектами @@ -2269,6 +2269,26 @@ function apply_fooling(desync, dis, fooling_options) Если dis = nil, берется desync.dis. Если fooling_options = nil, берется desync.arg +``` +function ipfrag2(dis, ipfrag_options) +``` + +Стандартная функция фрагментатор. Возвращает массив из двух диссектов-фрагментов исходного диссекта dis. +Задействуется через rawsend_dissect_ipfrag, если отсутствует поле ipfrag в ipfrag_options. +Отдельно вызывать эту функцию вряд ли понадобится. +Если вам нужно резать IP пакет как-то иначе, вы можете по аналогии создать свой фрагментатор и указать его в ipfrag_options. + +В случае ipv6 fragment header вставляется после всех hopbyhop, routing и первого destopt. Это unfragmentable part. +Дальше идет fragment header, а все остальное после него является fragmentable part. +Unfragmentable part передается в каждом фрагменте с измененными полями fragment header, остальное режется поверх +всего блока данных за fragment header согласно смещению фрагмента. + +По стандарту в случае ipv6 фрагментации next протокол берется только из первого фрагмента с offset=0. +В остальных фрагментах он не обязан совпадать и игнорируется. Манипуляция полем "next protocol" последующих фрагментов - +известная и описанная в статьях penetration атака, позволяющая пробить некоторые фаерволы. +ipfrag2 реализует эту возможность на двух фрагментах через указание параметра ipfrag_next. +Некоторые фаерволы пробиваются только большим количество фрагментов - для этого потребуется своя функция фрагментатор. + ## Отсылка Следующие функции могут брать несколько блоков описанных выше опций, каждый из которых представлен полем параметра options. @@ -2302,23 +2322,3 @@ mss берется из desync.tcp_mss. * rawsend : repeats берется из desync.arg.repeats, ifout и fwmark берутся из desync.arg, если они там есть, либо из desync (то, что пришло в desync функцию) * reconstruct : берется только desync.arg.badsum, остальные опции не используются -``` -function ipfrag2(dis, ipfrag_options) -``` - -Стандартная функция фрагментатор. Возвращает массив из двух диссектов-фрагментов исходного диссекта dis. -Задействуется через rawsend_dissect_ipfrag, если отсутствует поле ipfrag в ipfrag_options. -Отдельно вызывать эту функцию вряд ли понадобится. -Если вам нужно резать IP пакет как-то иначе, вы можете по аналогии создать свой фрагментатор и указать его в ipfrag_options. - -В случае ipv6 fragment header вставляется после всех hopbyhop, routing и первого destopt. Это unfragmentable part. -Дальше идет fragment header, а все остальное после него является fragmentable part. -Unfragmentable part передается в каждом фрагменте с измененными полями fragment header, остальное режется поверх -всего блока данных за fragment header согласно смещению фрагмента. - -По стандарту в случае ipv6 фрагментации next протокол берется только из первого фрагмента с offset=0. -В остальных фрагментах он не обязан совпадать и игнорируется. Манипуляция полем "next protocol" последующих фрагментов - -известная и описанная в статьях penetration атака, позволяющая пробить некоторые фаерволы. -ipfrag2 реализует эту возможность на двух фрагментах через указание параметра ipfrag_next. -Некоторые фаерволы пробиваются только большим количество фрагментов - для этого потребуется своя функция фрагментатор. -