简而言之:
据我了解,该hostname
命令有一个选项-f
。从手册页:
-f
在打印名称中包含域信息。这是默认行为。
由于这是默认行为,当我的打印名称不包含域信息,而只是包含MY-COMPUTER-NAME
.
一些附加信息:
我无法更改“共享”首选项中的“计算机名称”(如图所示,它呈灰色):
最初,我的“本地主机名”也设置为“Hippotigris”,但是当我注意到这个问题时,我将其更改为从命令中获得的内容hostname
:
我发现本文标题为“从终端设置 Mac 主机名或计算机名称”,但我不确定这样做是否会解决我的问题或加剧问题。
我正在努力实现的目标:
我将 NodeJS 的内置dns.lookup
函数与其内置os.hostname
函数结合使用。我认为该hostname
函数返回的内容与命令打印的内容相同hostname
(这就是它当前正在执行的操作)。当我跑步时:
node -e "require('dns').lookup(require('os').hostname() + '.local', console.log)"
它工作正常并打印本地网络上我的机器的 IP 地址,但是当我运行时
node -e "require('dns').lookup(require('os').hostname(), console.log)"
它记录错误:getaddrinfo ENOTFOUND LM-SJN-21001464
我问过周围看来这个脚本.local
对大多数人来说不起作用,所以我猜测它与我的机器配置有关。
答案1
感谢一些在推特上提供帮助我将“.local”添加到我的 DNS 设置中的搜索域中,这解决了我的核心问题,尽管hostname
(and os.hostname
) 仍然返回不附加“.local”的主机名。
所以这是我遇到的问题的答案,但不是我发布的问题,我仍然很想了解发生了什么以及我是否应该担心。
答案2
这主机名是机器本身的名称。主机名后面的部分,即.local
inhippotigris.local
或.kentcdodds.com
inhippotrigris.kentcdodds.com
就是所谓的域名。
您永远不应该将域名添加到主机名本身。
正如评论中已经提到的,.local
它是特殊的:它是组播DNS,它在本地 LAN 网段中进行多播名称解析。这与普通 DNS 名称解析的工作方式不同,并且被 Apple 广泛使用。
因此,当您require('dns').lookup()
在节点中执行此操作时,它将使用正常的 DNS 机制进行查找。但是,您的主机名不会在您用作普通 DNS 服务器的任何服务器(无论是您的家庭路由器上的服务器,还是您的 ISP 的 DNS 服务器)中注册。因此你得不到答案。
如果您追加.local
,node(或底层 MacOS 库)将改用 mDNS,这意味着它们可以找到您的主机名。
因此,这就是为什么您需要.local
在某个位置附加,可以直接附加,也可以自动附加到搜索路径中,或者通过任何其他方式附加(例如,在 Linux 上,您可以将名称搜索配置为以任意顺序同时使用 DNS 和 mDNS)。
至于为什么您在显示的 GUI 窗口中输入的主机名 (Hippotigrisis) 与通过 mDNS 宣布的名称 (LM-SJN-21001464) 不同,我不确定(因为 Mac UI 没有给出任何提示)实际上正在发生) - 人们必须找出该对话框准确设置的信息以及另一个名称(看起来像序列号)的设置位置。命令行工具可能有助于搜索此内容。
答案3
哇,这个问题有点奇怪,因为这里发生了一些事情。
尽量不重复别人说过的话
...我假设您想要访问正在使用的 Node 应用程序的 mDNS 名称,因此您可以从 LAN 上的单独盒子查看该应用程序,并且更愿意使用 mDNS没有必须使用。当地的在地址名称中而不是使用 IPv4 地址,顺便说一下,webpack 等工具允许0.0.0.0
在 webpack 配置文件中设置主机名,以访问 LAN 上的应用程序的开发服务器版本,即从单独的移动设备访问在 MacBook 上运行的本地运行的 React 应用程序。
进行几个 AOL 关键字搜索后,您在 macOS 系统首选项的共享窗格中引用的名称似乎也可以是网络BIOS名称,并且显然在某些时候 NETBIOS 名称不能超过 15 个字符不确定情况是否仍然如此,这就是为什么当我数数时,带有 LM... 的计算机名称正好是 15 个字符。
在这里黑暗中拍摄