使用os.Hostname()后,net.LookUpHost()不输出这样的主机

问题描述 投票:0回答:1

我目前正在尝试学习编程语言,并发现这个奇怪的问题。我已经创建了一个简单的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地址。有谁之前经历过这个吗?

macos go bonjour mdns
1个回答
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$

© www.soinside.com 2019 - 2024. All rights reserved.