如果我在 hosts 文件中有以下条目:
192.168.100.1 bugs
192.168.100.2 daffy.example.com
192.168.100.3 elmer.example.com.
本地实用程序(我假设使用“gethostbyaddr”或 Windows 等效程序)尝试进行 IP->名称解析是否会遵守这些条目?此行为可配置吗?它在操作系统之间有何不同?“hosts”文件条目是否完全合格是否重要?
编辑:回复 Russell,我的测试 Linux 系统正在运行 RHEL 4。我的 /etc/nsswitch.conf 包含以下“hosts”行:
hosts: files dns nis
如果我按名称 ping 任何主机(例如 bugs、daffy),正向解析将正常工作。如果我按 IP 地址对其中任何一个主机进行 traceroute,反向查找将按预期运行。但是,如果我按 IP ping 它们,ping 似乎无法解析它们的主机名。我的理解是,除非另有指示,否则 Linux ping 总是会尝试将 IP 解析为名称。为什么 traceroute 能够处理主机文件中的反向查找,而 ping 却不能?
答案1
通常,hosts 文件将用于正向和反向查找。Unix 系统上的首选项将取决于 nsswitch.conf 文件中条目的顺序。
例如,下面这行代码将使 hosts 文件覆盖 DNS。反转条目将使 DNS 覆盖 hosts 文件。
主机:文件 DNS
我不确定您是否可以在 Windows 系统上调整偏好顺序。
我查看了 inetutils-20071127 中 ping 的源代码(安装在我的 Ubuntu 9.04 机器上的版本),如果你 ping IP 地址而不是主机名,源代码似乎会启用仅数字模式:
如果 (inet_aton(target,&whereto.sin_addr) == 1) { 主机名=目标; 如果 (argc == 1) 选项 |= F_NUMERIC;
这可以解释为什么当您通过 IP 地址 ping 主机时没有得到反向查找。
答案2
我找到了有关更改注册表项以改变 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
需要修改。
DnsPriority= 0x3e8 (Decimal: 1000)
HostsPriority= 0x1f4 (Decimal: 500)
LocalPriority= 0x5dc (Decimal: 1500)
NetbtPriority= 0x7d1 (Decimal: 2001)
答案3
该/etc/host.conf
文件指定了用于发现 IP 地址的顺序。我的默认顺序如下:
#
# /etc/host.conf
#
order hosts,bind
multi on
这意味着总是首先检查 hosts 文件,然后再检查 DNS(绑定)。
如果nis
这里没有指定那么它将永远不会查看/etc/nsswitch.conf
。