Linuxではソケットからイーサネットパケットを受信したいが、2つのカスタムEthtype値のいずれかを持つものだけを受信したい。 のみ1 ethtypeが受信されなければならない場合、私は、知っているように、このCで複数のEthtypeを持つLinuxでイーサネットパケットを受信
int socket = socket(PF_PACKET, SOCK_RAW, htons(ETHERTYPE_CUSTOM_1);
しかし、どのような場合、私は2つの異なるethtypesを持っているようにソケットを作成しながら、それはこの値を指定することができますか?私は2つのソケットを使用するか、いくつかのカスタムフィルタを書く必要がありますか?それとも単純な方法がありますか?
私は2つのソケットを使用しています。つまり、システムが受け取るすべてのパケットに対してコードが実行されず、ほとんどのパケットが除外されます。 – Barmar
また、すべてをキャプチャしてBPFプログラムをインストールするためのソケットを1つ使用することも考えられます。確かに、libpcapを使って、Linux上でカーネルにBPFをインストールする方法を知っている 'pcap_setfilter'関数を利用するだけです。 'link'指示文では、比較を行うリンクヘッダに適切なフィールドを指定することができます。 –
@Barmarあなたは答えとしてコメントを追加してください – user3237732