diff --git a/docs/manual.md b/docs/manual.md index 005738d..04486b1 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -2090,9 +2090,9 @@ function fix_ip6_next(ip6, last_proto) Эти функции работают с диссектом ipv6 заголовка ip6 и его extension headers - ip6.exthdr. При вставлении или удалении extension headers сохраняется корректная цепочка следующих протоколов, начиная с базового ipv6 заголовка. -* insert_ip6_exthdr вставляет extension header с протоколом header_type и данными data в диссект ip6 по индексу ip6.exthdr idx. Если idx=nil, вставляется в конец. +* insert_ip6_exthdr вставляет extension header с протоколом header_type и данными data в диссект ip6 по индексу ip6.exthdr idx. Если idx=nil, вставляется в конец. Размер data должен быть 6+N*4 для IPPROTO_AH и 6+N*8 для остальных, иначе будут ошибки при реконструкции. * del_ip6_exthdr удаляет extension header по индексу ip6.exthdr idx. -* fix_ip6_next восстанавливает корректную цепочку следующих протоколов за счет ip6_nxt и полей type в ip6.exthdr. +* fix_ip6_next восстанавливает корректную цепочку следующих протоколов за счет ip6.ip6_nxt и полей type в ip6.exthdr. ``` function l3_base_len(dis) @@ -2158,7 +2158,7 @@ function writeable_file_name(filename) * is_absolute_path возвращает true, если путь path начинается с корня. Учитываются особенности путей CYGWIN. * append_path дописывает имя файла или каталога file к пути path, разделяя их знаком '/' * writeable_file_name возвращает filename, если filename содержит абсолютный путь или env `WRITEABLE` отсутствует. -Иначе берется путь из env `WRITEABLE` и к нему дописывается имя файла filename. +Иначе берется путь из env `WRITEABLE` и к нему дописывается имя файла filename через append_path. ## autottl @@ -2184,26 +2184,25 @@ delta - это положительная или отрицательная ра В следующих функция и функциях отсылки применяются стандартные блоки опций, представленных в виде полей отдельно передаваемой таблицы. Таблицы опций имеет формат desync.arg. Может передаваться прямо desync.arg без изменений. -Если передается desync и опции nil, функции берут desync.arg по умолчанию вместо опций. -ipid_options +**ipid_options** | Поле | Описание | |:------|:---------| | ip_id | режим назначения ip_id : seq, rnd, zero, none
seq - последовательное
rnd - случайное
zero - ноль
none - не менять | | ip_id_conn | запоминать последнее сгенерированное значение seq и начинать с него в следующем пакете. не работает без desync.track | Из seq далеко не всегда получится ожидаемая и преемлемая последовательность. -ip_id применяется только в ряде функций, оно не применяется ко всем проходящим пакетом автоматически. +ip_id применяется только в ряде функций, оно не применяется ко всем проходящим пакетам автоматически. Поскольку ОС не следит за измененными ip_id, в пакетах, которые не трогали, оно может начать идти заново. Windows заменяет нулевые ip_id на собственную последовательность, остальные ОС - нет. -fooling_options +**fooling_options** | Поле | Описание | |:------|:---------| | ip_ttl | изменить TTL в ipv4 заголовке на указанный | | ip6_ttl | изменить TTL (HL) в ipv6 заголовке на указанный | -| ip_autottl | изменить TTL в ipv4 заголовке на автоматически определяемый по шаблону autottl. при невозможности определения TTL не меняется | -| ip6_autottl | изменить TTL (HL) в ipv6 заголовке на автоматически определяемый по шаблону autottl. при невозможности определения TTL (HL) не меняется | +| ip_autottl | изменить TTL в ipv4 заголовке на автоматически определяемый по шаблону autottl. При невозможности определения TTL берется ip_ttl, если есть. Иначе TTL не меняется. | +| ip6_autottl | изменить HL в ipv6 заголовке на автоматически определяемый по шаблону autottl. При невозможности определения HL берется ip6_ttl, если есть. Иначе HL не меняется. | | ip6_hopbyhop | вставить extension header "hop-by-hop options". по умолчанию данные - 6 нулей, но можно задать hex строку с данными. длина должна быть 6+N*8 | | ip6_hopbyhop2 | вставить второй extension header "hop-by-hop options" | | ip6_destopt | вставить extension header "destination options". по умолчанию данные - 6 нулей, но можно задать hex строку с данными. длина должна быть 6+N*8 | @@ -2218,9 +2217,19 @@ fooling_options | tcp_flags_unset | снять флаги TCP. аналогично tcp_flags_set | | tcp_ts_up | поднять tcp timestamp опцию в самое начало, если она есть | +ipv6 extension headers добавляются в следующем порядке: + +1. hopbyhop +2. hopbyhop2 +3. destopt +4. routing +5. destopt2 +6. ah + Опции IP фрагментации ipfrag_options содержат только два стандартных параметра. Остальное берут заменяемые функции фрагментаторы, для которых существуют свои специфические опции. -ipfrag_options + +**ipfrag_options** | Поле | Описание | |:------|:---------| | ipfrag | имя функции фрагментатора. если нет, использовать ipfrag2. фрагментатор возвращает массив диссектов - фрагментов | @@ -2287,3 +2296,12 @@ function ipfrag2(dis, ipfrag_options) Задействуется через rawsend_dissect_ipfrag, если отсутствует поле ipfrag в ipfrag_options. Отдельно вызывать эту функцию вряд ли понадобится. Если вам нужно резать IP пакет как-то иначе, вы можете по аналогии создать свой фрагментатор и указать его в ipfrag_options. + +В случае ipv6 fragment headers вставляется после всех hopbyhop, routing и первого destopt. Это unfragmentable part. +Дальше идет fragment header, а все остальное после него является fragmentable part. +Unfragmentable part передается в каждом фрагменте с измененными полями fragment header, остальное режется поверх +всего блока данных за fragment header согласно смещению фрагмента. + +По стандарту в случае ipv6 фрагментации next протокол берется только из первого фрагмента с offset=0. +В остальных фрагментах он не обязан совпадать и игнорируется. Это известная и описанная в статьях penetration атака, позволяющая +пробить некоторые фаерволы. ipfrag2 реализует эту возможность на двух фрагментах через указание параметра ipfrag_next.