Je souhaite recevoir des paquets Ethernet de socket sous Linux, mais uniquement ceux qui ont l'une des deux valeurs Ethtype personnalisées. Comme je le sais, si seulement 1 ethtype doit être reçu, il est possible de spécifier cette valeur lors de la création d'une socket comme celle-ci

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

Mais que faire si j'ai 2 ethtypes différents? Dois-je utiliser 2 sockets ou écrire un filtre personnalisé? Ou y a-t-il un moyen simple?

0
user3237732 16 janv. 2017 à 19:26

2 réponses

Meilleure réponse

Créez deux sockets, une pour chaque éthertype. Ensuite, vous pouvez utiliser select() ou epoll() pour attendre les paquets sur l'un ou l'autre socket en même temps.

1
Barmar 1 févr. 2017 à 16:46

Je pense que vous devriez utiliser la bibliothèque libpcap. Vous devez accéder au filtre bpf packer. C'est simple. Ou vous pouvez utiliser les règles iptables une bibliothèque netfilter. Vous devez définir des règles de pré-routage iptables pour transférer tous les paquets vers un port spécifique et votre application liant ce port en tant que mode d'écoute et vous pouvez recevoir le paquet complet.

0
StxApp 17 janv. 2017 à 14:25