sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
setsockopt(sock, SOL_SOCKET, SO_ATTACH_FILTER, &f, sizeof (f))
Run Code Online (Sandbox Code Playgroud)
使用这个简单的 BPF/LPF 附加代码,当我尝试在套接字上接收数据包时,会得到一些与过滤器不匹配的错误数据包。在我调用setsockopt() 之前,这些数据包似乎已进入套接字。
似乎应该首先创建 AF_PACKET SOCK_RAW 套接字,然后附加过滤器,然后刷新套接字以摆脱那些错误的数据包。
所以问题是,如何刷新这些数据包?