Прием пакетов в пользовательском пространстве от 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() для дальнейшей обработки пакета.
Я не хочу повторять то, что есть в этом руководстве, но этого должно быть достаточно для начала.