在Linux中接收带有多个Ethtypes的以太网数据包

时间:2017-01-16 16:26:09

标签: c linux sockets ethernet

我希望在Linux中接收来自套接字的以太网数据包,但只接收那些具有两个自定义Ethtype值之一的数据包。 据我所知,如果只收到1个ethtype,可以在创建socket这样的时候指定这个值

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

但是,如果我有两种不同的ethtypes怎么办?我应该使用2个插座还是写一些自定义过滤器?或者有一些简单的方法吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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