Как изменить Пакет Ethernet (пакет, который прибывает из NIC)?Могу ли я использовать Netfilter Hooks? - PullRequest
0 голосов
/ 31 июля 2011

Я хочу перехватить пакет до того, как этот пакет пройдет уровни tcp / ip и передать его в пространство пользователя с C ++ и пользовательским интерфейсом.

Как я могу это сделать?Qt & Netfilter - это то, что может сделать это?

Ответы [ 3 ]

2 голосов
/ 31 июля 2011

Qt там беспомощен. Вам нужно написать обработчик NFQueue для netlink. Когда ваши пакеты соответствуют правилу, которое говорит -j NFQUEUE, ваша пользовательская программа получит эти пакеты, что позволит вам принимать, отбрасывать или манипулировать (изменять) пакет (только в таблице mangle). Если вы можете использовать библиотеки GPLv2, вы должны использовать libnetfilter_queue , чтобы помочь вам.

Обратите внимание, что слой Mac не завершен. Это связано с тем, что сетевой код должен поддерживать различные типы устройств, а некоторые устройства, не относящиеся к Ethernet, не имеют адресов MAc. На устройстве Ethernet вы обычно получаете только MAC-адрес отправителя.

0 голосов
/ 19 октября 2018

Вы также можете использовать так называемое пакетное гнездо.Они используются для отправки или получения необработанных пакетов на уровне 2. Таким образом, пакет в основном поступает непосредственно в вашу программу, и вы можете реализовать свои собственные протоколы уровня 3 и 4 поверх нее.Проверьте эту официальную справочную страницу для сокета пакета.

http://man7.org/linux/man-pages/man7/packet.7.html

0 голосов
/ 17 марта 2014

Вы можете использовать NFQUEUE и libnetfilter_queue.

iptables -t raw -I PREROUTING -p tcp -j NFQUEUE --queue-num 1

Вы можете увидеть пример на этом сайте:

libnetfilter_queue_samplecode

Поток Iptables

...