2009-11-25 25 views
0

Je souhaite créer un socket pour accéder aux paquets IPv4 à partir de la couche de liaison de données. De V1 de programmation réseau unix,Accès aux paquets de couche de liaison de données

socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP)) 

1) Je suis un client de la mise en œuvre dhcp, est-ce la bonne façon de le faire? (signifie sans accéder à la couche de liaison de données, je ne peux pas recevoir de réponse du serveur dhcp) ou existe-t-il un autre moyen plus facile? également, puisque cette socket recevra tous les paquets IPv4 destinés à mon système, comment distinguer le paquet de réponse dhcp des autres paquets?

2) s'il vous plaît me suggérer un bon lien/tuorial pour programmation réseau avec accès à la couche de liaison de données. Dans le livre ci-dessus, ce n'est pas une description détaillée.

C'est my code

+0

J'ai obtenu où ETH_IP est. Donc j'ai changé la question. Je m'excuse pour ça. S'il vous plaît répondre à la nouvelle question ci-dessus – avd

Répondre

1

Avez-vous besoin aussi les en-têtes de couche de liaison? Si oui, vous devez utiliser SOCK_RAW - SOCK_DGRAM va supprimer l'en-tête de la couche de liaison avant de le fournir à votre application.

Vous pouvez identifier les requêtes DHCP par les ports source et destination, étant donné que DHCP génère du trafic sur les ports UDP 67 et 68.

+0

Je pense que je n'aurai pas besoin de l'en-tête de la couche de liaison bcoz Je suis l'implémentation du client DHCP donc je n'ai besoin que de l'en-tête IPv4. – avd

2

Avez-vous essayé de regarder les bibliothèques PPCE? Il fournit de belles fonctions de filtrage sur IP, port et d'autres choses.

+0

Je veux analyser le cadre IP seul pour que je puisse apprendre. – avd

+0

pcap n'analyse pas les en-têtes IP ou les paquets DHCP. Cela vous permet juste, comme mentionné par Jack, de * filtrer * dans le noyau, ainsi votre application n'est pas submergée par les paquets que vous ne voulez pas. – bortzmeyer