我想在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