首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >traceroute如何解析名字?

traceroute如何解析名字?
EN

Unix & Linux用户
提问于 2011-09-28 13:42:43
回答 3查看 38.8K关注 0票数 11

在编写脚本时,我想用我给它命名的计算机名(例如"selenium-rc")引用一台机器。我无法使用"selenium-rc“来切换它,所以我尝试了下面的命令来查看名称是否被识别。

代码语言:javascript
复制
> 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“找到”了这个名字。多么?下一个..。

代码语言:javascript
复制
> traceroute selenium-rc
traceroute: unknown host selenium-rc

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

后来我回来的时候..。

代码语言:javascript
复制
> 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名称解析过程必须包含某种优先级,并且现在给出了一个由网络上的另一个系统/服务分配的可能更权威的结果。(不幸的是,我假设它是一个我无法控制的动态名称,因此它在脚本中不会有用。)

有人能解释一下结果吗?

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2011-09-28 14:05:14

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

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

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

代码语言:javascript
复制
order hosts,bind

在Solaris中,这个顺序通过主机数据库条目中的/etc/nsswitch.conf文件控制。

主机:文件dns

在搜索DNS之前设置在/etc/host中查找的搜索顺序。

Traceroute和ping都将使用这些方法搜索所有配置的命名数据库。hostnslookup命令都只使用DNS,因此它们不一定会复制您正在看到的看似不一致的结果。

Solaris有一个查找工具getent,它可以使用与traceroute和ping相同的方式识别主机或地址,方法是按照配置好的命名数据库集进行搜索。

代码语言:javascript
复制
getent hosts <hostname>

搜索/etc/nsswitch.conf中列出的任何数据库。

所以。在您的示例中,要获得一致的结果,请向/etc/host添加以下内容

代码语言:javascript
复制
192.168.235.41 selenium-rc

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

代码语言:javascript
复制
order hosts,bind

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

代码语言:javascript
复制
hosts: files dns

完成之后,您将看到ping和traceroute以及其他命令(如ssh、telnet、curl、wget等)的结果更加一致。

票数 9
EN

Unix & Linux用户

发布于 2011-09-28 17:28:05

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

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

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

票数 2
EN

Unix & Linux用户

发布于 2011-09-28 16:10:53

我的猜测是:调用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服务器配置。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/21612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档