Я пытаюсь создать модуль ядра, который сможет отправлять модифицированные пакеты из пакетов, которые он получает через перехват сетевых фильтров. Я использую кодовый скелет, предоставленный здесь . Я создаю сырой сокет внутри ядра, просто используя этот код:
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, переданный мне функцией перехвата, а дубликат - измененная копия исходного пакета.
Возврат из вызова dev_queue_xmit указывает на то, что пакет был успешно передан, но я не вижу пакет на проводе. У меня есть два вопроса: во-первых, я хотел бы иметь возможность лучше отлаживать происходящее, поэтому любые советы по этому поводу очень ценятся. Кроме того, мне интересно, правильно ли я занимаюсь созданием сокетов, или мне не хватает какой-то конфигурации. Это все очень ново для меня, поэтому вполне возможно, что я упускаю что-то глупое.