【问题标题】:What's the cleanest way to obtain the IP address from net/http.Request.RemoteAddr从 net/http.Request.RemoteAddr 获取 IP 地址的最简洁方法是什么
【发布时间】:2019-08-20 03:57:12
【问题描述】:

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

该结构包括 RemoteAddr: 字符串。

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

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

"[::1]:53947"

一个 IPv4 示例是:

"127.0.0.1:54572"

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

【问题讨论】:

    标签: http go


    【解决方案1】:

    我想你在找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

    【讨论】:

    • 谢谢。这对我来说并不明显的原因是 split 函数属于 net 库。我在net/http 中寻找它。现在说得通了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多