如果我在hosts文件中有以下条目:
192.168.100.1 bugs 192.168.100.2 daffy.example.com 192.168.100.3 elmer.example.com.
IP->本地实用程序的名称解析尝试(我假设使用’gethostbyaddr’或Windows等效项)是否尊重这些条目?这种行为是否可配置?它在操作系统之间有何不同? “主机”文件条目是否完全合格是否重要?
编辑:为了回应Russell,我的测试Linux系统正在运行RHEL 4.我的/etc/nsswitch.conf包含以下’hosts’行:
hosts: files dns nis
如果我按名称ping任何主机(例如bug,daffy),则前向分辨率可以正常工作.如果我通过IP地址跟踪其中任何一个,则反向查找按预期运行.但是,如果我通过IP ping它们,ping似乎不会解析它们的主机名.我的理解是Linux ping总是会尝试将IP解析为名称,除非另有说明.为什么traceroute能够处理主机文件中的反向查找,但ping不?
解决方法
通常,hosts文件将用于正向和反向查找.这对Unix系统的偏好取决于你nsswitch.conf文件中的条目顺序.
例如下面的行将使hosts文件覆盖DNS.撤消条目将使DNS覆盖hosts文件.
hosts: files dns
我不确定你是否可以调整到Windows系统的优先顺序.
我在inetutils-20071127(安装在我的Ubuntu 9.04盒子上的版本)上查看了ping的源代码,如果你ping一个IP地址而不是一个主机名,源代码似乎启用了仅数字模式:
if (inet_aton(target,&whereto.sin_addr) == 1) { hostname = target; if (argc == 1) options |= F_NUMERIC;
这可以解释为什么在通过IP地址ping主机时没有进行反向查找.