![Traceroute 如何解析名称?](https://linux22.com/image/18063/Traceroute%20%E5%A6%82%E4%BD%95%E8%A7%A3%E6%9E%90%E5%90%8D%E7%A7%B0%EF%BC%9F.png)
在编写脚本时,我想通过我给它的计算机名称来引用机器(例如“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 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”名称在机器本身上没有改变,但是跟踪路由名称解析过程必须包括某种优先级,并且现在给出了由网络上的另一个系统/服务分配的可能更权威的结果。 (不幸的是,我假设它是一个我无法控制的动态名称,因此它在脚本中没有用处。)
有人可以解释结果吗?
答案1
通常,在 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 文件控制的。
主机:文件 dns
将搜索顺序设置为在搜索 DNS 之前先查看 /etc/hosts。
Traceroute 和 ping 都会使用这些方法来搜索所有配置的命名数据库。host
和命令nslookup
都仅使用 DNS,因此它们不一定会重复您看到的看似不一致的结果。
Solaris 有一个查找工具,getent
它可用于以与traceroute 和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 等)更加一致的结果。
答案2
看起来您已正确设置反向查找,但未设置正向查找。
您的系统可以查找 IP 地址 192.168.235.41 并识别出它是selenium-rc
,但是当它尝试查找时却selenium-rc
失败了。
我建议您检查/etc/hosts
并/etc/resolv.conf
;系统调用的行为getaddrinfo
由后者决定并引用前者。
答案3
我的猜测:调用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 服务器配置。