语境
在 Linux Debian 64 位上研究 Berkeley 数据包过滤器,对打开的套接字接收到的数据包进行过滤。
我使用AF_PACKET
所以我甚至管理第 2 层数据包。
到目前为止,它工作得很好。但是我必须过滤每个套接字上的每个数据包,而且效率不高。因此我使用 BPF。
问题
因为我有我的应用程序自己设置过滤器
setsockopt(sd, SOL_PACKET, SO_ATTACH_FILTER, &filter, sizeof(filter)) < 0 )
我想知道 :
如果内核将过滤数据包并将其定向到正确的套接字(过滤在内核级别的系统上每个数据包发生一次)
- 或者
如果内核将像以前一样发送所有数据包,并且 bpf 将在每个套接字中进行过滤(每个数据包将被分析 + 过滤的次数与系统上打开的套接字一样多,因为每个应用程序都会看到数据包进入 <-> 混杂模式. 这效率不高)。
我不知道。
谢谢