LINUX.ORG.RU

Отправляемые данные в сеть

 ,


0

1

В ядре с помощью netfilter в точке NF_IP_POST_ROUTING получаю доступ к исходящим пакетам.
В ф-ции обработчике есть доступ к заполненным заголовкам ip и tcp и к буферу сокета skb
skb->data указывает на начало ip
Далее, если вывести данные которые находятся по skb->data, то можно увидеть, что за tcp заголовком нет данных
(Т.е. в буфер сокета, на данном этапе данные ещё не записаны)
А в skb->data_len указано количество отправляемых данных (не ноль)
Вопрос: Где находится указатель на данные, которые будут переданы в сеть? (Записаны в буфер сокета) (Мне нужно прочесть отправляемые данные. Как это сделать?)


Далее, если вывести данные которые находятся по skb->data, то можно увидеть, что за tcp заголовком нет данных

А как эти данные выводятся? Если чем-то вроде printk, то без явной передачи длины печать закончится на любом нулевом байте.

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)

Добро пожаловать в мир нелинейных skb.

skb_copy - это просто, но может быть очень дорого (skb на 60кБ из 16 фрагментов).

Посмотри код ip_set_string_main.c начиная с 462 строки

    if(!skb_is_nonlinear(skb)) {
    ...
    } else {
там есть код для доступа ко всем фрагментам данных.

vel ★★★★★
()