Comment envoyer des données sur un socket SOCK_PACKET sans spécifier l'hôte auquel il est destiné? J'ai construit l'en-tête IP pour montrer où il devrait aller, mais write() ne fonctionnera pas.Envoi de données sur le socket AF_PACKET
0
A
Répondre
2
Ne pas. utilisez write(), utilisez sendto().
Si vous utilisez PF_PACKET, SOCK_DGRAM, alors il construit pour vous les en-têtes de la couche liaison, ce qui est normalement ce que vous voulez. Cependant, vous devez toujours construire le protocole le plus élevé que vous utilisez.
Vous spécifiez un sockaddr_ll dans le paramètre de destination. Vous pouvez spécifier une adresse de monodiffusion de couche liaison, une adresse de multidiffusion ou une adresse de diffusion.
L'hôte spécifié avec sendto() est-il important si l'en-tête IP contient la destination – computergeek6
Oui absolument; Si vous envoyez un paquet IP, vous devez quand même l'envoyer à l'adresse de couche liaison appropriée si vous utilisez PF_PACKET, SOCK_DGRA. Si vous voulez envoyer des paquets IP bruts, je vous recommande d'utiliser plutôt PF_INET, SOCK_RAW. – MarkR
Si j'utilise PF_INET, SOCK_RAW, est-ce que je devrais lier le socket? – computergeek6