Maison >développement back-end >Golang >Comment créer des paquets TCP personnalisés dans Go et éviter la panique « IP src invalide 127.0.0.1 » ?

Comment créer des paquets TCP personnalisés dans Go et éviter la panique « IP src invalide 127.0.0.1 » ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-24 11:04:10812parcourir

How to Craft Custom TCP Packets in Go and Avoid the

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn