我目前正在尝试学习编程语言,并发现这个奇怪的问题。我已经创建了一个简单的go应用程序,可以成功获取Hostname,然后我尝试获取我的地址。最后,我迭代这些地址。
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地址。有谁之前经历过这个吗?
您尝试解决的.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
另请注意,net包提供了一个DefaultResolver
变量,您可以使用自定义实现覆盖该变量以解析\.local$
。