我希望在Linux中接收来自套接字的以太网数据包,但只接收那些具有两个自定义Ethtype值之一的数据包。 据我所知,如果只收到1个ethtype,可以在创建socket这样的时候指定这个值
int socket = socket(PF_PACKET, SOCK_RAW, htons(ETHERTYPE_CUSTOM_1);
但是,如果我有两种不同的ethtypes怎么办?我应该使用2个插座还是写一些自定义过滤器?或者有一些简单的方法吗?
答案 0 :(得分:1)
创建两个套接字,每个套接字对应一个ethertype。然后,您可以使用select()
或epoll()
同时等待任一套接字上的数据包。
答案 1 :(得分:0)
我认为你应该使用libpcap库。您需要访问bpf packer过滤器。 这很容易。 或者您可以使用iptables规则和netfilter库。您需要设置prerouting iptables规则以将所有数据包转发到特定端口,并且您的应用程序将此端口绑定为侦听模式,您可以接收完整数据包。