首页 > 后端开发 > Golang > 正文

如何在 Go 中制作自定义 TCP 数据包并避免'无效的 src IP 127.0.0.1”恐慌?

Susan Sarandon
发布: 2024-11-24 11:04:10
原创
783 人浏览过

How to Craft Custom TCP Packets in Go and Avoid the

使用 gopacket 在 Go 中编写原始 TCP 数据包

您的目标是使用 gopacket 制作自定义 TCP 数据包并通过原始套接字发送它们。但是,您在提供的代码中遇到问题,导致出现以下恐慌:“src IP 127.0.0.1 无效。”

制作自定义 IPv4 数据包

示例您提供的代码还旨在制作自定义 IP 第 3 层标头,这与单独处理 TCP 层不同。这里有一个深入的解释:

在 Go 中创建原始套接字

与某些假设相反,在 Go 中创建原始套接字可以使用 net.ListenPacket、net.DialIP , 或 net.ListenIP:

conn, err := net.ListenIP("ip4:tcp", netaddr)
登录后复制

设置IP 套接字选项

要设置您自己的 IPv4 第 3 层标头,您需要启用名为 IP_HDRINCL 的套接字选项。 Core Go 包不支持此功能,但 ipv4 等第三方库可以提供此功能:

conn, err := ipv4.NewRawConn(network, addr)
登录后复制

此函数建立原始连接并为 IPv4 启用 IP_HDRINCL。

替代方案

对于涉及 TCP 标头的更简单的任务操作时,延迟代码可能适合:

// Create a raw socket
fd, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_RAW, syscall.IPPROTO_TCP)
登录后复制

但是,此方法不允许修改 IPv4 标头。

建议

要使用提供的代码解决您的问题,您需要使用类似的库ipv4 启用 IP_HDRINCL 并设置自定义 IP 标头。或者,您可以探索 latency 包,以获取 TCP 标头操作的简化方法。

以上是如何在 Go 中制作自定义 TCP 数据包并避免'无效的 src IP 127.0.0.1”恐慌?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板