J'ai commencé à coder un injecteur de paquets et à lire un peu ce que l'on doit faire. Une chose que je me demande quand je crée l'en-tête IP est que les champs h_source et h_dest doivent contenir l'adresse mac de l'expéditeur et du destinataire. Dois-je faire cela et existe-t-il un moyen rapide de trouver l'adresse mac de la destination? Disons que je crée un paquet ping ICMP ou un paquet TCP arbitraire. Ce serait bien de pouvoir dire "envoyez-le à 192.168.0.10 depuis 192.168.0.1" sans avoir à vous soucier des adresses mac. Je suppose que le noyau remplit normalement ceci mais le laisser interférer ici ne me permettrait pas de contrôler complètement le paquet.Dois-je entrer l'adresse MAC src et dst dans le paquet forgé?
Répondre
Je crains que vous avez ce mal, IP n'a pas connaissance de l'adresse MAC, seule la couche Ethernet le sait. C'est pourquoi vous avez besoin du protocole ARP pour déterminer à quelle adresse mac envoyer un paquet IP. Normalement, vous savez à quel sous-réseau vous appartenez, si votre adresse IP de destination est locale, vous ARP pour le MAC et envoyez-le directement (ceci est généralement fait à un niveau beaucoup plus bas). Si ce n'est pas sur votre sous-réseau local, vous ARP pour l'IP de la passerelle et l'envoyer à la place, ce qui le fera suivre d'une manière ou d'une autre.
La seule source et destination présentes dans l'en-tête IP sont les adresses IP source et de destination.
HTH.
EDIT:
Pour clarification. Lors de l'envoi via la passerelle, le paquet IP n'est normalement pas touché (sauf TTL, et, à cause de cela, la somme de contrôle). Il y a des situations où le paquet IP doit être fragmenté, mais c'est un problème différent. Le point est que les adresses source et de destination restent les mêmes, c'est seulement sur la couche ci-dessous que nous disons en fait qu'elle devrait être envoyée via une passerelle ou un routeur.
Oui, vous devrez remplir cette Vous pouvez utiliser ARP pour déterminer l'adresse MAC d'une adresse IP donnée. http://en.wikipedia.org/wiki/Address_Resolution_Protocol
Je voulais dire l'en-tête Ethernet ... je l'ai mélangé avec l'en-tête ip ... désolé – inquam
Eh bien @inquam, vous n'avez pas besoin de créer l'en-tête mac si vous voulez simplement envoyer des paquets IP. Si vous voulez forger le mac-source et la destination, alors tout naturellement vous devrez remplir ceux-ci en vous-même, je ne vois vraiment plus votre question. – falstro
Si je veux fabriquer un paquet à la main, j'ai pensé que je devais faire tous les en-têtes moi-même ... Mais puis-je obtenir le noyau pour faire l'en-tête ethernet pour moi autant que je veux avec l'en-tête ip et tcpheader et ses options? – inquam