Отправка пакета через модуль ядра - PullRequest
8 голосов
/ 15 ноября 2011

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

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

1 Ответ

1 голос
/ 18 ноября 2011

Вряд ли вам нужно модифицировать ядро ​​для выполнения вашей задачи. Рассматривали ли вы использование Tun или Tap интерфейса, чтобы вы могли выполнять всю свою работу в пространстве пользователя? Вот учебник: http://backreference.org/2010/03/26/tuntap-interface-tutorial/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...