Прием пакетов в пользовательском пространстве от netfilter

Я хочу перехватить все tcp-пакеты на порту 80, которые идут по прямому адресу, и передать их в программу пространства пользователя для искажения. Я знаю, как сделать это с помощью правила IPtables, такого как

iptables -A FORWARD ... -j NFQUEUE --queue-num 10

но я не могу найти никаких примеров, и есть ограничение по времени, поэтому я не могу просто просеивать код Wireshark. Я ищу примеры или даже место для начала. Могу ли я использовать розетки? или есть структура данных ядра, которую я могу использовать для извлечения пакетов из стека, и как только я закончу, как я могу передать пакеты обратно в сетевой фильтр?

1 ответ

Решение

Вы можете написать модуль ядра, который регистрирует пакеты в очереди для определенного протокола. Вы можете прочитать netfilter-hacking-HOWTO, на странице 25 есть раздел "Обработка пакетов в очереди". В этом разделе обсуждается на более высоком уровне, но отвечает на все ваши вопросы.

Загрузите его с: http://www.netfilter.org/documentation/index.html

Вы можете использовать nf_reinject() для дальнейшей обработки пакета.

Я не хочу повторять то, что есть в этом руководстве, но этого должно быть достаточно для начала.

Другие вопросы по тегам