我想在Linux中接收来自套接字的以太网数据包,但只有那些具有两个自定义Ethtype值之一的套接字。 据我所知,如果只有1 ethtype应该被接收,这是可能的,而这样的接收Linux中的以太网数据包,并在C中有多个EthTypes
int socket = socket(PF_PACKET, SOCK_RAW, htons(ETHERTYPE_CUSTOM_1);
但是创造插座如果我有2个不同的ethtypes可以指定这个值?我应该使用2个套接字还是写一些自定义过滤器?或者有什么简单的方法?
我会使用2个套接字,这样你的代码就不会为系统收到的每个数据包运行,只是为了过滤掉大部分数据包。 – Barmar
您也可以考虑使用一个套接字来设置捕获所有内容,然后安装BPF程序。事实上,我只是使用libpcap并利用'pcap_setfilter'函数,它在linux上知道如何将BPF安装到内核中。 'link'指令应该允许你在链接头中指定相应的字段来进行比较。 –
@Barmar请将您的评论添加为答案 – user3237732