我想从 Linux 中的套接字接收以太网数据包,但仅限于那些具有两个自定义 Ethtype 值之一的数据包。据我所知,如果只接收 1 个 ethtype,则可以在创建这样的套接字时指定此值
int socket = socket(PF_PACKET, SOCK_RAW, htons(ETHERTYPE_CUSTOM_1);
但是,如果我有 2 种不同的种族类型怎么办?我应该使用 2 个套接字还是编写一些自定义过滤器?还是有什么简单的方法?
创建两个套接字,每个以太类型一个。然后,您可以使用 select()
或 epoll()
同时等待任一套接字上的数据包。
我认为你应该使用libpcap库。您需要访问 bpf 封隔器过滤器。这很容易。或者,您可以使用 iptables 规则和网络过滤器库。您需要设置预路由 iptables 规则以将所有数据包转发到特定端口,并且您的应用程序将此端口绑定为侦听模式,您可以接收完整的数据包。