为了接收和转发具有自定义 IP 源地址的 DHCP 发现,请考虑在 Go 中使用原始套接字。原始套接字提供对数据包标头的控制,允许您伪造具有特定源 IP 地址的数据包。
请注意,伪造 IP 源地址可能会带来安全风险。使用 root 权限运行应用程序或授予其 CAP_NET_RAW 功能(通过 setcap)以获得正确的功能至关重要。
Go 的标准网络库缺乏原始套接字支持,因为它是专门的并且可能会经历 API 更改。但是,go.net 子存储库提供了 ipv4 和 ipv6 软件包,前者适合您的需求。查看 http://godoc.org/code.google.com/p/go.net/ipv4#NewRawConn 了解更多详情。
利用 ipv4.RawConn 的 ReadFrom 方法获取源数据包。然后,您可以使用这些字段以及 GIADDR 逻辑来设置 WriteTo 调用的标头。这是一个说明性代码片段:
for { hdr, payload, _, err := conn.ReadFrom(buf) if err != nil { ... } hdr.ID = 0 hdr.Checksum = 0 hdr.Src = ... hdr.Dst = ... if err := conn.WriteTo(hdr, payload, nil); err != nil { ... } }
以上是如何使用 Go 中的原始套接字通过伪造的 IP 源地址自定义 DHCP 发现?的详细内容。更多信息请关注PHP中文网其他相关文章!