【问题标题】:net.LookUpHost() outputs no such host after using os.Hostname()net.LookUpHost() 使用 os.Hostname() 后没有输出这样的主机
【发布时间】:2018-09-01 19:11:01
【问题描述】:

我目前正在尝试学习编程语言 go,但遇到了这个奇怪的问题。 我创建了一个简单的 go 应用程序,它成功地获取了主机名,然后我尝试使用它来获取我的地址。最后我遍历这些地址。

package main

import (
    "fmt"
    "net"
    "os"
    "strconv"
)

func main() {
    name, error := os.Hostname()
    fmt.Println("Name: " + name)
    fmt.Print("Error: ")
    fmt.Println(error)

    addrs, err := net.LookupHost(name)

    fmt.Println(addrs)

    fmt.Println(err)

    for indx, addr := range addrs {
        fmt.Println("Address number " + strconv.Itoa(indx) + ": " + addr)
    }
}

输出如下:

Name: My-macbook.local
Error: <nil>
[]
lookup My-macbook.local: no such host

我也尝试使用 net.LookUpIP(name),结果相同。我已连接到互联网,并检查了我在系统偏好设置 -> 网络中是否有一个 IP 地址。我目前使用的是装有 macOS Sierra 的 Macbook Pro。

我的朋友使用完全相同的 go 版本运行完全相同的代码并返回了两个地址,所以我有什么东西阻止我看到我的 IP 地址。有没有人经历过这种情况?

【问题讨论】:

  • 这只是意味着您的系统对自己的主机名的概念没有反映在 DNS 中。
  • 如果您的目标是确定机器的 IP 地址,这也不是特别简单,因为一台机器可能有多个 IP 地址。
  • 有没有办法改变我系统的主机名概念,以便反映我的 DNS?
  • 一个答案取决于太多的事情。

标签: macos go bonjour mdns


【解决方案1】:

您尝试解析的.local 地址不是常规 DNS 条目,它是本地网络的特殊条目。它有多个名称,例如 bonjouravahi 等。RFC 将其称为 mdns https://en.wikipedia.org/wiki/.local,另请参见 dns service discovery

根据doc,您应该尝试设置此环境变量export GODEBUG=netdns=cgo,以强制golang dns解析器调用系统库。确实是纯golang DNS解析器does not resolve mdns

您也可以尝试其他 mdns golang 实现,例如 https://github.com/hashicorp/mdns

另请注意,net 包提供了一个 DefaultResolver 变量,您可以使用自定义实现覆盖该变量以解析 \.local$

【讨论】:

  • 感谢您的回复。我尝试了导出 GODEBUG=netdns=cgo,但这没有任何影响。正如@Flimzy 提到的那样,有什么方法可以让我的主机名反映在我的 DNS 中?覆盖 net 包并使用替代实现似乎很奇怪,因为我朋友的 macbook 对此没有任何问题。
  • 假设您的朋友可以解析您的主机名,这不是您的计算机宣布 dns 的问题,而是您的计算机上的 golang dns 解析器实现无法解析 dns 的问题。也许你和你的朋友没有用同样的方式安装 golang,或者一些库。 IDK macos 对不起。 FTR mdns 可以让你宣布任何 dns,你可以尝试这样下去。
  • 你能显示GODEBUG=netdns=1 go run main.goGODEBUG=netdns=cgo+1 go run main.go的输出吗?
  • GODEBUG=netdns=1 运行 main.go 输出 Name: My-Macbook.local Error: &lt;nil&gt; go package net: using cgo DNS resolver [] lookup My-Macbook.local: no such hostGODEBUG=netdns=cgo+1 运行 main.go 输出 Name: My-Macbook.local Error: &lt;nil&gt; go package net: using cgo DNS resolver [] lookup My-Macbook.local: no such host
猜你喜欢
  • 1970-01-01
  • 2022-07-03
  • 2023-03-10
  • 1970-01-01
  • 2011-06-25
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多