我目前正在尝试学习编程语言,并在这个奇怪的问题上感到困惑。 我创建了一个简单的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地址。以前有没有人经历过?
答案 0 :(得分:1)
您要解析的.local
地址不是常规的DNS条目,它是本地网络的特殊地址。它具有多个名称,例如bonjour
,avahi
等。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
还请注意,网络软件包提供了一个DefaultResolver
变量,您可以使用自定义实现覆盖该变量来解析\.local$
。