本地“主机”文件中的条目是否覆盖正向和反向名称查找?

Mur*_*iar 16 domain-name-system hosts

如果我在主机文件中有以下条目:

192.168.100.1    bugs
192.168.100.2    daffy.example.com
192.168.100.3    elmer.example.com.
Run Code Online (Sandbox Code Playgroud)

本地实用程序的 IP-> 名称解析尝试(我假设使用“gethostbyaddr”或 Windows 等效项)会尊重这些条目吗?这种行为是可配置的吗?它在操作系统之间有何不同?“主机”文件条目是否完全合格是否重要?

编辑:响应 Russell,我的测试 Linux 系统正在运行 RHEL 4。我的 /etc/nsswitch.conf 包含以下“主机”行:

hosts:      files dns nis
Run Code Online (Sandbox Code Playgroud)

如果我按名称 ping 任何主机(例如 bugs、daffy),则前向解析工作正常。如果我通过 IP 地址跟踪路由其中的任何一个,反向查找将按预期运行。但是,如果我通过 IP ping 它们,ping 似乎无法解析它们的主机名。我的理解是,除非另有指示,否则 Linux ping 将始终尝试将 IP 解析为名称。为什么 traceroute 能够处理主机文件中的反向查找,而 ping 不能?

Rus*_*ing 16

通常,hosts 文件将用于正向和反向查找。在 Unix 系统上的偏好取决于 nsswitch.conf 文件中的条目顺序。

例如,下面的行将使主机文件覆盖 DNS。反转条目将使 DNS 覆盖主机文件。

主机:文件 dns

我不确定您是否可以在 Windows 系统上按偏好顺序进行调整。

我查看了 inetutils-20071127(安装在我的 Ubuntu 9.04 机器上的版本)中的 ping 源,如果您 p​​ing IP 地址而不是主机名,源似乎启用了仅数字模式:

                if (inet_aton(target, &whereto.sin_addr) == 1) {
                        主机名 = 目标;
                        如果(argc == 1)
                                选项 |= F_NUMERIC;

这可以解释为什么当您通过 IP 地址 ping 主机时没有进行反向查找。


Jam*_*s F 8

我找到了更改注册表项以更改 Windows 上的名称解析顺序的参考:

http://forums11.itrc.hp.com/service/forums/questionanswer.do?threadId=963485

从那里引用:

默认情况下,Windows 按以下顺序检查名称解析提供程序:

本地、(NetBT 本地名称缓存)、主机、DNS、NetBT (WINS)。

您希望顺序为主机、DNS、本地、NetBT。

在下文中,较低的数字具有较高的优先级。

中的以下注册表项

HKEY_LOCAL_MACHINE\SYSTEM\CurentControlSet\ServicessTcpip\ServiceProvider
Run Code Online (Sandbox Code Playgroud)

需要修改。

DnsPriority= 0x3e8 (Decimal: 1000)
HostsPriority= 0x1f4 (Decimal: 500)
LocalPriority= 0x5dc (Decimal: 1500)
NetbtPriority= 0x7d1 (Decimal: 2001)
Run Code Online (Sandbox Code Playgroud)