Roh-TCP-Pakete in Go mit gopacket verfassen
Ihr Ziel ist es, benutzerdefinierte TCP-Pakete mit gopacket zu erstellen und diese über Raw-Sockets zu versenden. Sie stoßen jedoch auf ein Problem mit dem bereitgestellten Code, was zu der folgenden Panik führt: „ungültige Quell-IP 127.0.0.1.“
Erstellen benutzerdefinierter IPv4-Pakete
Das Beispiel Der von Ihnen bereitgestellte Code zielt auch darauf ab, benutzerdefinierte IP-Layer-3-Header zu erstellen, was ein anderes Anliegen als die ausschließliche Handhabung von TCP-Layern darstellt. Hier ist eine ausführliche Erklärung:
Erstellen von Raw-Sockets in Go
Entgegen manchen Annahmen ist das Erstellen von Raw-Sockets in Go mit net.ListenPacket, net.DialIP möglich , oder net.ListenIP:
conn, err := net.ListenIP("ip4:tcp", netaddr)
IP-Socket einstellen Optionen
Um Ihren eigenen IPv4-Layer-3-Header festzulegen, müssen Sie eine Socket-Option namens IP_HDRINCL aktivieren. Dies wird in Core Go-Paketen nicht unterstützt, aber Bibliotheken von Drittanbietern wie ipv4 können diese Funktionalität bereitstellen:
conn, err := ipv4.NewRawConn(network, addr)
Diese Funktion stellt eine Rohverbindung her und aktiviert IP_HDRINCL für IPv4.
Alternativen
Für einfachere Aufgaben mit TCP-Header-Manipulation: Der Code Latenz kann geeignet sein:
// Create a raw socket fd, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_RAW, syscall.IPPROTO_TCP)
Dieser Ansatz erlaubt jedoch keine Änderung von IPv4-Headern.
Empfehlungen
Um Ihr Problem mit dem bereitgestellten Code zu lösen, müssen Sie eine Bibliothek wie verwenden ipv4, um IP_HDRINCL zu aktivieren und benutzerdefinierte IP-Header festzulegen. Alternativ können Sie das Paket latency für einen vereinfachten Ansatz zur TCP-Header-Manipulation erkunden.
Das obige ist der detaillierte Inhalt vonWie erstelle ich benutzerdefinierte TCP-Pakete in Go und vermeide die Panik „ungültige Quell-IP 127.0.0.1'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!