traceroute如何解析名称?


11

在编写脚本时,我想通过提供的计算机名称(例如“ selenium-rc”)引用计算机。我无法使用“ selenium-rc”对其执行ping操作,因此我尝试了以下命令来查看名称是否被识别。

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  selenium-rc (192.168.235.41)  0.545 ms  0.241 ms  0.124 ms

好的,traceroute“找到”了名字。怎么样?下一个 ...

> traceroute selenium-rc
traceroute: unknown host selenium-rc

嗯...这里的查找机制必须不同,因为主机是未知的。我假设这是使用系统名称解析过程,而第一个示例是使用特定于traceroute的过程。正确?

然后等一下我回来...

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  minint-q4e8i52.mycorp.net (192.168.235.41)  0.509 ms  0.206 ms  0.136 ms

好,结果不同。“ selenium-rc”名称在计算机本身上没有更改,但是traceroute名称解析过程必须包括某种优先级,并且现在可以得出网络上另一个系统/服务分配的更具权威性的结果。(不幸的是,我假设它是我无法控制的动态名称,因此在脚本中将没有用。)

有人可以解释结果吗?

Answers:


9

通常,在Linux和Unix中,traceroute和ping都将使用对gethostbyname()的调用来查找系统名称。gethostbyname()依次使用系统配置文件来确定查询命名数据库的顺序,即:/ etc / hosts和DNS。

在Linux中,默认操作是(或者曾经是)首先查询DNS,然后查询/ etc / hosts。可以通过在/etc/host.conf中设置所需的顺序来更改或更新。

要在DNS之前搜索/ etc / hosts,请在/etc/host.conf中设置以下顺序:

order hosts,bind

在Solaris中,可以通过/etc/nsswitch.conf文件(位于hosts数据库的条目中)控制相同的顺序。

主机:文件dns

设置搜索顺序以在搜索DNS之前先查看/ etc / hosts。

Traceroute和ping都将使用这些方法来搜索所有已配置的命名数据库。在hostnslookup命令都使用唯一的DNS,所以他们不一定会重复你看似不一致的结果所看到的。

Solaris有一个查找工具,getent该工具可以按照跟踪路由和ping的相同方式用于识别主机或地址-通过遵循配置的命名数据库集进行搜索。

getent hosts <hostname>

将在/etc/nsswitch.conf中搜索列出的所有数据库中的主机。

所以。对于您的情况,要获得一致的结果,请在/ etc / hosts中添加以下内容

192.168.235.41 selenium-rc

并且,确保/etc/host.conf具有:

order hosts,bind

或者,确保/etc/nsswitch.conf具有:

hosts: files dns

完成后,您应该在ping和traceroute以及其他命令(例如ssh,telnet,curl,wget等)中看到更一致的结果。


当我使用dig实用程序查询resolv.conf文件中列出的DNS服务器时,发现了两个条目。我猜想traceroute更喜欢完全合格的路由。
基思·本特鲁普

2

看起来您已正确设置了反向查找,但没有正向设置。

您的系统可以查找IP地址192.168.235.41并识别为selenium-rc,但尝试查找时selenium-rc会失败。

我建议你检查/etc/hosts/etc/resolv.conf; getaddrinfo系统调用的行为由后者决定,并引用前者。


1

我的猜测:调用traceroute 192.168.235.41导致DNS请求出去,找到IP地址为192.168.235.41的名称。 traceroute -n 192.168.235.41是启动traceroute的方法,而无需对找到的每个IP地址进行DNS查找。DNS服务器花费的响应时间比DNS系统想要等待的时间长,因此,起初traceroute并未提供192.168.235.41的主机名。当traceroute发送并接收来自192.168.235.41的数据包时,您的DNS服务器已响应,因此traceroute可以为其提供主机名。

因此,我会说“ DNS服务器问题”,它的计时非常方便,使您怀疑其他事情。在这里考虑“墨菲定律”。稍后再回来时,您为相同的IP地址使用了不同的名称,这也使我认为在进行路由跟踪时,也许有人在搞乱DNS服务器配置。

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.