Composer des paquets TCP bruts dans Go avec gopacket
Votre objectif est de créer des paquets TCP personnalisés à l'aide de gopacket et de les envoyer via des sockets bruts. Cependant, vous rencontrez un problème avec le code fourni, entraînant la panique suivante : "IP 127.0.0.1 src invalide."
Création de paquets IPv4 personnalisés
L'exemple Le code que vous avez fourni vise également à créer des en-têtes IP de couche 3 personnalisés, ce qui est une préoccupation distincte de la seule gestion des couches TCP. Voici une explication détaillée :
Création de sockets bruts dans Go
Contrairement à certaines hypothèses, la création de sockets bruts dans Go est possible en utilisant net.ListenPacket, net.DialIP , ou net.ListenIP :
conn, err := net.ListenIP("ip4:tcp", netaddr)
Réglage de la prise IP Options
Pour définir votre propre en-tête IPv4 de couche 3, vous devez activer une option de socket connue sous le nom d'IP_HDRINCL. Ceci n'est pas pris en charge dans les packages Core Go, mais des bibliothèques tierces comme ipv4 peuvent fournir cette fonctionnalité :
conn, err := ipv4.NewRawConn(network, addr)
Cette fonction établit une connexion brute et active IP_HDRINCL pour IPv4.
Alternatives
Pour les tâches plus simples impliquant la manipulation d'en-tête TCP, le Le code de latence peut convenir :
// Create a raw socket fd, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_RAW, syscall.IPPROTO_TCP)
Cependant, cette approche ne permet pas de modifier les en-têtes IPv4.
Recommandations
Pour résoudre votre problème avec le code fourni, vous devrez utiliser une bibliothèque comme ipv4 pour activer IP_HDRINCL et définir des en-têtes IP personnalisés. Alternativement, vous pouvez explorer le package latency pour une approche simplifiée de la manipulation des en-têtes TCP.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!