【问题标题】:Get IPv4 address from net tcp connection从 net tcp 连接获取 IPv4 地址
【发布时间】:2020-07-31 22:15:50
【问题描述】:

当新的 TCP 客户端连接到我的 Go 服务器时,我正在尝试打印日志。

        l, err := net.Listen("tcp", bindPort)
        c, err := l.Accept()
        clientIP := c.RemoteAddr().String()
        fmt.Println("==> accepted new client, IP:", clientIP)

我在本地主机上的测试输出

==> accepted new client, IP: [::1]:56780

我没有找到任何方法来获取或将其转换为 IPv4 (192.168.1.31) 表单。

【问题讨论】:

  • 如果客户端通过 IPv6 连接,则您无法“转换”地址,并且它显然是通过环回接口 (localhost) 连接的,因此您想要的地址在任何情况下都不起作用。

标签: go


【解决方案1】:

如果你想使用 IPv4,你可以强制它只听 IPv4

bindPort := "0.0.0.0:1234"
// or to be more specific, bindPort := "192.168.1.31:1234"
l, err := net.Listen("tcp", bindPort)

我假设你在 Linux 上运行 golang,如果你使用默认内核选项,IPv6 更像是一个默认监听器。

另外,如果你想连接不是本地主机,你可以指定绑定地址来连接服务器。即:

client, _ := net.Dial("tcp", "192.168.1.31:1234")

【讨论】:

  • 谢谢,或者如果我想要本地主机,我可以使用隐含的 127.0.0.1 并强制它进入 IPv4,它可以工作
猜你喜欢
  • 2010-11-06
  • 2013-06-21
  • 1970-01-01
  • 2017-04-16
  • 2011-01-04
  • 1970-01-01
  • 2010-11-19
  • 2015-11-12
  • 1970-01-01
相关资源
最近更新 更多