Отправка пакета через модуль ядра

Я пытаюсь создать модуль ядра, который сможет отправлять измененные пакеты из тех, которые он получает через подключение netfilter. Я использую скелет кода, предоставленный здесь .Я создаю необработанный сокет внутри ядра, просто используя этот код:

struct socket *sockptr;
sock_create(PF_INET, SOCK_RAW, IPPROTO_TCP, &sockptr);

Функция sendpacket вызывается следующим образом:

len = sendpacket(sockptr, dev, IPPROTO_TCP, duplicate, ntohs(dupiph->tot_len));

socketptr - это необработанный сокет, который я создал, dev - это net_device, переданный мне функцией подключения, и duplicate - это измененная копия исходного пакета.

Возврат вызова dev_queue_xmit указывает на то, что пакет был передан успешно, но я не вижу пакет на проводе. У меня два вопроса: во-первых, я хотел бы иметь возможность лучше отлаживать то, что происходит, поэтому я очень ценю любые советы по этому поводу. Кроме того, мне интересно, правильно ли я обрабатываю создание сокета или есть какая-то конфигурация, которую мне не хватает. Все это для меня в новинку, так что вполне возможно, что я упускаю что-то глупое.

8
задан Community 23 May 2017 в 12:07
поделиться