linux raw connecteur ethernet lier à des protocole

Je suis à l'écriture de code pour envoyer des premières trames Ethernet entre deux machines Linux. Pour tester cela, je veux juste obtenir un client simple d'envoyer et de serveur-recevoir.

J'ai correctement le client faisant des paquets (je peux les voir à l'aide d'un renifleur de paquets).

Sur le côté serveur j'initialise la prise de la sorte:

fd = socket(PF_PACKET, SOCK_RAW, htons(MY_ETH_PROTOCOL));

MY_ETH_PROTOCOL est un 2 octets constante-je utiliser comme un ethertype donc je ne l'entendent pas de superflus trafic réseau.

quand je relier cette prise à mon interface, je dois passer à un nouveau protocole dans le socket_addr struct:
socket_address.sll_protocol = htons(MY_ETH_PROTOCOL);
Si j'ai compiler et exécuter le code comme ceci puis il échoue. Mon serveur ne voit pas le paquet. Cependant si je change le code comme suit:
socket_address.sll_protocol = htons(ETH_P_ALL);
Le serveur peut alors voir le paquet envoyé par le client (ainsi que de nombreux autres paquets) alors, je dois faire quelques vérifications du paquet pour voir s'il correspond à MY_ETH_PROTOCOL.

Mais je ne veux pas que mon serveur d'entendre la circulation qui n'est pas envoyé sur le protocole spécifié si ce n'est pas une solution. Comment puis-je faire cela?

Vous pouvez coller le code à l'endroit où vous configurez votre socket_address?

OriginalL'auteur dschatz | 2010-07-29