在 Linux 中接收以太网数据包,在 C 中具有多个 Ethtypes



我想从 Linux 中的套接字接收以太网数据包,但仅限于那些具有两个自定义 Ethtype 值之一的数据包。据我所知,如果只接收 1 个 ethtype,则可以在创建这样的套接字时指定此值

int socket = socket(PF_PACKET, SOCK_RAW, htons(ETHERTYPE_CUSTOM_1);

但是,如果我有 2 种不同的种族类型怎么办?我应该使用 2 个套接字还是编写一些自定义过滤器?还是有什么简单的方法?

创建两个套接字,每个以太类型一个。然后,您可以使用 select()epoll() 同时等待任一套接字上的数据包。

我认为你应该使用libpcap库。您需要访问 bpf 封隔器过滤器。这很容易。或者,您可以使用 iptables 规则和网络过滤器库。您需要设置预路由 iptables 规则以将所有数据包转发到特定端口,并且您的应用程序将此端口绑定为侦听模式,您可以接收完整的数据包。

最新更新