2011-11-15 3 views
8

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

Функция sendpacket называется этим:

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

socketptr быть сокеты я создал, DEV быть net_device в прошло для меня функцией перехвата, а дубликат - измененной копией исходного пакета.

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

+0

Можете ли вы объяснить, что вы сделали, сказав: «Я не вижу пакет на проводе». Я предлагаю установить wirehark или другую программу сниффера. – Michel

+0

Извините, я должен был уточнить. Используемый интерфейс - это «venet0», который является интерфейсом, используемым контейнерами openvz. Я наблюдал трафик на этом интерфейсе с помощью Wireshark и не видел пакетов. – bschulte3

+0

Вы уверены, что iptables правильно настроен для передачи таких пакетов? – Dan

ответ

1

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

Смежные вопросы