Необработанный сокет и производительность libpcap для захвата входящих кадров Ethernet - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть требование для захвата пользовательских входящих кадров Ethernet на интерфейсе. Однако я не хочу записывать исходящие кадры Ethernet, отправленные моим приложением, на тот же интерфейс.

Я пробовал искать и нашел по крайней мере эти 2 способа:

  1. Использование необработанного сокета (ETH_P_ALL) и recvfrom (), а также проверка in_addr.sll_pkttype! = PACKET_OUTGOING (в пространстве пользователя). К сожалению, в кадре Ethernet нет подходящих полей, которые я могу использовать для фильтрации исходящих кадров с помощью фильтра BPF.

  2. Использование интерфейса pcap, pcap_next_ex () и pcap_setdirection () (отбрасывание выполняется в пространстве ядра?).

В целом, могу ли я узнать, какой способ имеет лучшую производительность? Спасибо.

...