У меня есть требование для захвата пользовательских входящих кадров Ethernet на интерфейсе. Однако я не хочу записывать исходящие кадры Ethernet, отправленные моим приложением, на тот же интерфейс.
Я пробовал искать и нашел по крайней мере эти 2 способа:
Использование необработанного сокета (ETH_P_ALL) и recvfrom (), а также проверка in_addr.sll_pkttype! = PACKET_OUTGOING (в пространстве пользователя). К сожалению, в кадре Ethernet нет подходящих полей, которые я могу использовать для фильтрации исходящих кадров с помощью фильтра BPF.
Использование интерфейса pcap, pcap_next_ex () и pcap_setdirection () (отбрасывание выполняется в пространстве ядра?).
В целом, могу ли я узнать, какой способ имеет лучшую производительность? Спасибо.