我正在尝试获取 net/http 请求的套接字 id/fd,以便我可以将它与 syscall.Bind() 一起使用来将套接字绑定到我的许多公共传出 IPV4 地址之一。
我希望能够选择用于传出请求的 IP 地址。这是针对 Windows 的。
任何帮助是极大的赞赏。
下面是一些适用于 linux 的代码,但我需要获取 http.Client 的套接字 fd 而不是 net.Conn。
func bindToIf(conn net.Conn, interfaceName string) {
ptrVal := reflect.ValueOf(conn)
val := reflect.Indirect(ptrVal)
//next line will get you the net.netFD
fdmember := val.FieldByName("fd")
val1 := reflect.Indirect(fdmember)
netFdPtr := val1.FieldByName("sysfd")
fd := int(netFdPtr.Int())
//fd now has the actual fd for the socket
err := syscall.SetsockoptString(fd, syscall.SOL_SOCKET,
syscall.SO_BINDTODEVICE, interfaceName)
if err != nil {
log.Fatal(err)
}
}
眼眸繁星
相关分类