有没有一种方法可以在不接触“/etc/hosts”的情况下确定计算机主机名?

有没有一种方法可以在不接触“/etc/hosts”的情况下确定计算机主机名?

考虑到我位于使用 DHCP 分配 IP 地址的 LAN 中(而且我不是其管理员),我该如何设置,以便当我ping <hostname>(而不是 )时ping <IP address>,我确实得到了一些东西,而无需添加匹配项在“/etc/主机名”中)?我是否需要在 Web 服务器和 ssh 服务器的不同位置进行此更改?

我想知道因为我思考曾经有一段时间,我可以做到这一点,而无需摆弄“/etc/hosts”(或者我错了?)。该文件的问题在于,我必须在每个想要使用名称到 IP 映射的客户端上执行此操作,并且如果某些 IP 地址发生更改,则必须不断更改它。

真正的问题是:是否有一个工具可以进行主机名的网络发现(当然与其 IP 地址相匹配)。

答案1

理想情况下,您的系统管理员应该使用 DNS 服务器设置网络,并且该 DNS 服务器将使用来自 DHCP 的主机名动态更新。

您可以尝试使用ICMP 域名报文来收获它们,但我认为这并没有得到广泛实施。

另一种较旧的方法是 NIS 服务器。但这些已经不再常见了。你可以尝试ypcat hosts看看这是否会给你带来一些回报。

另一个是 Zeroconf,支持它的主机广播它们的名称,您可以运行一个缓存它们的服务(阿瓦希包就是这样做的。如果您已经设置好,那么 aping <hostname>.local可能已经适合您了。但并非每个节点都支持这一点。您还可以尝试使用 avahi 工具进行查询:avahi-resolve-host-name <hostname>.local并编写一个脚本,在普通解析器不起作用时为您更新 /etc/hosts。

因此没有其他“神奇”的地方可以获取主机名。必须有人定义该映射,或者使其可动态发现。如果您的系统管理员没有或不会,那么您必须这样做。您可以在本地计算机上执行此操作的唯一位置是 /etc/hosts 文件。因此,如果上述方法都不起作用,那么您就只能这么做了。对不起。

答案2

你是否想过零配置? Zeroconf 是一套协议,用于在两台或多台机器之间建立 IP 链接并发现服务。不幸的是,zeroconf 领域存在多种名称解析协议,因此其完全跨平台的目标并未完全实现。但如果所有机器都运行相同的操作系统,这不是问题。 Zeroconf 的主要目标用例是通过交叉电缆连接的两台机器,但它也可以在本地交换网络上工作。

Linux 上最常见的 Zeroconf 实现是阿瓦希。在 Debian 或 Ubuntu 上,安装该avahi-daemon软件包应该足以开始使用。其他软件包也可能有用(特别是avahi-autoipd如果您想在未运行 DHCP 服务器的网络中协商 IP 地址avahi-discover以查看可用服务)。

答案3

DNS 服务器可以在这方面为您提供帮助。您可以将客户端设置为从 DHCP 获取 IP,并使用动态 dns 让客户端在获取新 IP 时更新 DNS 服务器。

请参阅以下链接以 BIND dns 服务器为例

答案4

虽然不是100%你可以尝试一下。

ping <hostname>.local

我知道这在寻找 OSX 或 Ubuntu 主机时有效。

相关内容