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


16

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

192.168.100.1    bugs
192.168.100.2    daffy.example.com
192.168.100.3    elmer.example.com.

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

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

hosts:      files dns nis

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

Answers:


16

通常,主机文件将用于正向和反向查找。在Unix系统上的首选项将取决于nsswitch.conf文件中条目的顺序。

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

主机:文件dns

我不确定您是否可以在Windows系统上调整到优先顺序。

我看了inetutils-20071127(安装在我的Ubuntu 9.04盒子上的版本)中ping的源,并且如果您ping IP地址而不是主机名,则该源似乎启用了仅数字模式:

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

这可以解释为什么通过IP地址ping主机时为什么没有反向查询。


那是我的想法,但事实并非如此。有关详细信息,请参见更新的问题。
Murali Suriar,2009年

我还没有机会查看源代码。但是,快速查看ldd输出表明,在我的系统上ping直接链接到libresolv DNS解析程序库,这可能意味着它绕过nsswitch文件并直接进行反向查找...
Russell Heilling 09年

使用ISC host实用程序时,可能会给人以编辑/ etc / hosts无效的印象。host 10.0.0.1将执行DNS查询,并忽略hosts文件。这允许检查系统解析器:perl -MSocket -le '$a=inet_aton(shift); $_=gethostbyaddr $a, AF_INET; print' 10.0.0.1
mivk 2015年

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

需要修改。

DnsPriority= 0x3e8 (Decimal: 1000)
HostsPriority= 0x1f4 (Decimal: 500)
LocalPriority= 0x5dc (Decimal: 1500)
NetbtPriority= 0x7d1 (Decimal: 2001)

他们如何从中获得此类“内部工作”信息?
和平者

1

/etc/host.conf文件指定了用于发现IP地址的顺序。我的默认情况下包含以下内容:

#
# /etc/host.conf
#

order hosts,bind
multi on

这意味着始终先检查主机文件,然后再检查DNS(绑定)。

如果nis未在此处指定,则将永远不会查看/etc/nsswitch.conf

文档链接:http : //tldp.org/LDP/nag/node82.html


对于某些系统,/ etc / host.conf方法已过时,仅使用nsswitch.conf(例如基于glibc和eglibc的系统)。这些版本的glibc将在不发出警告的情况下解析“ /etc/host.conf”,并丢弃“ order”行。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.