【发布时间】:2015-10-03 06:19:35
【问题描述】:
如何在 Go 中找到本地主机的 FQDN?
顺便说一句:net.LookupAddr() 在 Windows 上不起作用。所以这不是一个选择。
【问题讨论】:
-
不。这不会返回 DNS 后缀。
-
如何从操作系统获取信息?从这个意义上说,Go 没有什么特别之处。 'USERDNSDOMAIN' 环境变量设置了吗?
-
那行不通。通常不设置。检索连接 DNS 后缀的位置取决于操作系统。有 api 调用或 /etc 文件。我发现 Go 没有提供跨操作系统的通用方法来获取它,您必须为每个操作系统自己编写函数。对于 Window,我需要调用
IpAdapterAddresses系统调用;在 linux 上,当我将应用程序移植到 CentOS 时,我必须弄清楚。 -
这就是我要说的。 IIRC
USERDNSDOMAIN是在主机登录到 AD 域时设置的,它可能不存在,但如果它是你真正想要的吗?除了内核中配置的内容之外,Go 无法知道您可能还想要什么。在 linux 上,您想要第一个网络接口的 PTR 记录,还是想要主机名加上来自resolv.conf的“域”条目,或者您想要/etc/hosts中列出的第一个 fqdn 作为本地地址,或者执行您想使用nswitch.conf从其他目录查找主机吗? -
这没有意义。计算机通常不知道自己的 FQDN,或者可能没有任何方法可以访问信息。失败的方法有很多。