Может ли кто-нибудь указать мне хорошую отправную точку, чтобы узнать, как libpcap получает свои пакеты от сетевого драйвера? Я намерен заменить функцию получения быстрой реализацией.
Как libpcap получает пакет от драйвера?
Ответы (1)
«Функция приема»:
- стандартная функция приема драйвера, ничем не отличающаяся от той, что используется для приема пакетов и передачи их в обычный сетевой стек;
- часть «пакетного сокета» обычного сетевого стека.
Некоторые Слайды Intel по DPDK, по-видимому, указывают на то, что DPDK позволяет коду пользовательского пространства напрямую взаимодействовать с сетевым адаптером. Это означает, что правильным способом использования этого с libpcap было бы написать «модуль» libpcap, который использует DPDK.
Libpcap какое-то время поддерживал возможность иметь несколько «модулей» для захвата трафика. Это не подключаемые модули, которые можно загружать во время выполнения (это может случиться когда-нибудь, но, поскольку libpcap может потребовать дополнительных привилегий для захвата трафика, необходимо обеспечить поддержку сторонних подключаемых модулей ОЧЕНЬ осторожно, чтобы предотвратить запуск ненадежного кода с этими привилегиями!); они скомпилированы в libpcap.
Некоторые примеры модулей в исходном коде libpcap, отличные от модулей «по умолчанию» для различных ОС, это pcap-snf.c
для сетевых карт Myricom и pcap-dag.c
для плат Endace DAG.
Если вы хотите продолжить это, вероятно, было бы лучше, если бы вы подписались на tcpdump-workers. список рассылки и продолжил обсуждение там. (Это не очень посещаемый список, и, несмотря на его название, он предназначен как для пользователей, так и для разработчиков как libpcap, так и tcpdump; вы попадаете в категорию «разработчиков libpcap», поскольку кто-то пишет модуль захвата.)