Я пытаюсь создать модуль ядра, который сможет отправлять измененные пакеты из тех, которые он получает через сетевое подключение. Я использую скелет кода, предоставленный here. Я создаю сокеты внутри ядра, просто используя этот код:Отправка пакета через модуль ядра
Функция sendpacket называется этим:
len = sendpacket(sockptr, dev, IPPROTO_TCP, duplicate, ntohs(dupiph->tot_len));
socketptr быть сокеты я создал, DEV быть net_device в прошло для меня функцией перехвата, а дубликат - измененной копией исходного пакета.
Возврат из вызова dev_queue_xmit указывает, что пакет был успешно передан, но я не вижу пакет на проводе. У меня есть два вопроса: во-первых, я хотел бы иметь возможность лучше отлаживать то, что происходит, поэтому любые советы, касающиеся этого, очень ценятся. Кроме того, мне интересно, правильно ли я обрабатываю создание сокета или нет какой-либо конфигурации, которую я пропускаю. Это все очень ново для меня, поэтому очень хорошо, что я упускаю что-то глупое.
Можете ли вы объяснить, что вы сделали, сказав: «Я не вижу пакет на проводе». Я предлагаю установить wirehark или другую программу сниффера. – Michel
Извините, я должен был уточнить. Используемый интерфейс - это «venet0», который является интерфейсом, используемым контейнерами openvz. Я наблюдал трафик на этом интерфейсе с помощью Wireshark и не видел пакетов. – bschulte3
Вы уверены, что iptables правильно настроен для передачи таких пакетов? – Dan