Расширение заголовка пакета из ловушки Netfilter - PullRequest
0 голосов
/ 14 апреля 2011

Я хочу добавить IP-заголовок в существующий IP-пакет, находясь внутри NF_HOOK_LOCAL_OUT.Проблема, с которой я сталкиваюсь, заключается в том, что функции расширения skb (такие как заголовок copy / clone / expand / reallocate) выделяют новый sk_buff.Мы не можем вернуть этот недавно выделенный указатель, так как функция ловушки netfilter больше не (версия ядра 2.6.31) передает адрес указателя skb (передает по значению).Как я решил проблему следующим образом: 1. Я получил новый skb с помощью skb_header_realloc ().Это копирует все данные из скб.2. Я изменил новый skb (назовем его skb2), добавив новый заголовок IP, добавив соответствующие значения в новый заголовок IP.3. Замените содержимое исходного skb (переданного в функции ловушки Netfilter) содержимым skb2 с помощью skb_morph ().Возвращено NF_ACCEPT.

Это единственный способ добиться того, к чему я стремился?Есть ли более эффективное решение?Существуют ли другие варианты использования skb_morph (кроме кода повторной сборки IP)?

1 Ответ

1 голос
/ 21 июня 2011

Это работает для меня, в ядрах 2.6:

...
struct iphdr* iph;
if (skb_headroom(skb) < sizeof(struct iphdr))
  if (0 != pskb_expand_head(skb, sizeof(struct iphdr) - skb_headroom(skb), 0, GFP_ATOMIC)) {
    printk("YOUR FAVOURITE ERROR MESSAGE");
    kfree_skb(skb);
    return NF_STOLEN;
  }
iph = (struct iphdr*) skb_push(skb, sizeof(struct iphdr));
//Fill ip packet
return NF_ACCEPT;

Надеюсь, это поможет.

...