从net / http.Request.RemoteAddr获取IP地址的最干净方法是什么

时间:2019-08-19 19:46:47

标签: http go

Golang net / http库提供了Request struct, 这是运行服务器时返回的对象。

该结构包含RemoteAddr:字符串。

这包含远程(客户端)IP地址和客户端端口号。当然可以是IPv4或IPv6。

(当客户端在本地主机上时)看到的IPv6示例值是:

"[::1]:53947"

IPv4示例为:

"127.0.0.1:54572"

是否有库函数可将它们分解为主机和端口,还是有必要使用字符串操作?

1 个答案:

答案 0 :(得分:4)

我认为您正在寻找net.SplitHostPort

func main() {
  host, _, _ := net.SplitHostPort("[::1]:53947")
  fmt.Println(host)
  host, _, _ = net.SplitHostPort("127.0.0.1:54572")
  fmt.Println(host)
}

https://play.golang.org/p/BuQRhD0sL54

由于您需要的只是主机,因此可以_端口。如果您需要其他方法,也可以使用net.JoinHostPort