我需要捕获接口上的自定义传入以太网帧。但是,我不想捕获我的应用程序在同一接口上发送的传出以太网帧。
我尝试搜索,至少发现了以下两种方式:
使用原始套接字(ETH_P_ALL)和recvfrom(),并检查in_addr.sll_pkttype!= PACKET_OUTGOING(在用户空间中)。不幸的是,以太网帧中没有合适的字段,我可以使用BPF过滤器丢弃传出的帧。
使用pcap接口,pcap_next_ex()和pcap_setdirection()(在内核空间中执行丢弃吗?)。
总体而言,我可以知道哪种方法具有更好的性能吗?谢谢。