Kei*_*rup 11 networking hostname ping
在编写脚本时,我想通过我给它的计算机名称(例如“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
Run Code Online (Sandbox Code Playgroud)
好的,traceroute“找到”了这个名字。如何?下一个 ...
> traceroute selenium-rc
traceroute: unknown host selenium-rc
Run Code Online (Sandbox Code Playgroud)
嗯……这里的查找机制肯定不一样,因为主机是未知的。我假设这是使用系统名称解析过程,而第一个示例是使用特定于 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
Run Code Online (Sandbox Code Playgroud)
好吧,不同的结果。“selenium-rc”名称在机器本身上没有改变,但 traceroute 名称解析过程必须包括某种优先级,并且现在给出由网络上的另一个系统/服务分配的可能更权威的结果。(不幸的是,我假设它是一个我无法控制的动态名称,因此它在脚本中没有用。)
有人可以解释结果吗?
通常,在 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
Run Code Online (Sandbox Code Playgroud)
在 Solaris 中,这个相同的顺序是通过 /etc/nsswitch.conf 文件控制的,该文件位于 hosts 数据库的条目中。
主机:文件 dns
将搜索顺序设置为在搜索 DNS 之前在 /etc/hosts 中查找。
Traceroute 和 ping 都会使用这些方法来搜索所有配置的命名数据库。在host
和nslookup
命令都使用唯一的DNS,所以他们不一定会重复你看似不一致的结果所看到的。
Solaris 有一个查找工具 ,getent
可用于以与 traceroute 和 ping 相同的方式识别主机或地址 - 通过遵循配置的命名数据库集进行搜索。
getent hosts <hostname>
Run Code Online (Sandbox Code Playgroud)
将搜索 /etc/nsswitch.conf 中为主机列出的任何数据库。
所以。在您的情况下,要获得一致的结果,请将以下内容添加到 /etc/hosts
192.168.235.41 selenium-rc
Run Code Online (Sandbox Code Playgroud)
并且,确保 /etc/host.conf 具有:
order hosts,bind
Run Code Online (Sandbox Code Playgroud)
或者,确保 /etc/nsswitch.conf 具有:
hosts: files dns
Run Code Online (Sandbox Code Playgroud)
完成后,您应该会看到 ping 和 traceroute 以及其他命令(如 ssh、telnet、curl、wget 等)的结果更加一致。