当你这样做时:
$ whois stackoverflow.com
你的Linux是否先进行DNS查询,找到stackoverflow.com的IP,然后直接在那里询问信息?
或者它是否询问“根”whois 服务器(“根 whois 服务器”的 IP 是否以类似的方式硬编码在 Linux 发行版中/etc/bind/db.root
?),然后委托给另一个提供信息的 whois 服务器?
连接流程是怎样的?
my computer doing `whois ...` ---> root whois server ---> another whois server ---> information
或者
my computer doing `whois ...` ---> DNS server (?) ---> ... ?
答案1
如果您正在使用马可·德伊特里whois
,您可以添加--verbose
选项来查看它正在做什么。对于 stackoverflow.com,它首先询问 whois.verisign-grs.com(请参阅其WHOIS 服务器列表),其中提供了许多信息,包括 Stack Overflow 的注册商是 Name.com,其 WHOIS 服务器是 whois.name.com;然后它会继续询问 whois.name.com。
该协议记录在RFC 3912。这whois
联机帮助页还有有用的指针。
答案2
斯蒂芬回答了核心部分,但我还有其他一些问题需要解决:
- Whois 是一个定义不明确的协议。没有层次结构,没有根 whois 等。事实上,whois 系统中没有任何与 DNS 相关的内容,您应该首先在脑海中将它们完全分开,因为除了它们从同一来源(注册表)获取数据之外,您还应该将它们完全分开。数据库)它们完全独立运行。
- 每个 TLD 注册管理机构在这方面的运作方式都不同。 gTLD 本身就是一个例子:根据 ICANN 合同,目前每个注册商都有义务拥有一个 whois 服务器来回答其处理的所有域名。注册管理机构也有相同的要求。注册表 whois 输出列出了注册商 whois 服务器(但正如我在上面的评论中所写的,最近情况略有变化 - 事实上没有充分的理由 - 这破坏了许多 whois 客户端)主要是由于一个很快就会消失的历史原因:在过去(现在仍然是 .COM/.NET - .JOBS 最近发生了切换,但之前处于同一条船上,请参阅https://www.icann.org/resources/pages/thick-whois-transition-policy-2017-02-01-en) 注册机构为“thin”,这意味着注册机构不存储有关联系人的数据,只有注册商存储。这意味着,如果您确实想要获得有关域名的数据并找到出现问题时的联系对象(这曾经是,现在仍然是 WHOIS 协议的最初目标),您需要首先查询注册表 WHOIS 服务器获取基本信息集并发现注册商 whois 服务器,然后联系该注册商 whois 服务器以访问所有联系信息。这解释了为什么今天 .COM/.NET 的注册表输出只为您提供有关域名服务器、日期和状态的数据。以及注册商 whois 服务器名称,whois 客户端尝试遵循但有时不能,因为事情发生了变化(请参阅上面的评论)
- ccTLD 几乎总是不会这样工作,即使使用注册商,查询注册管理机构的 whois 服务器也会让您返回所需的所有结果,即使某些结果丢失(例如出于隐私原因),您也不需要查询注册商的 whois 服务器,因为注册管理机构并未强制要求他们为自己管理的 ccTLD 运行该服务(但有些注册服务商仍然这样做)。
.fr
例如,这解释了您对域名的观察。 - 一些 whois 客户端硬编码 whois 服务器的地址,一些尝试
whois.nic.$TLD
默认情况下通常作为注册表$TLD
作为nic.$TLD
主要操作域名。 - IANA 处理注册管理机构列表https://www.iana.org/domains/root/db并在每个注册表页面中,例如https://www.iana.org/domains/root/db/fr.html您将看到一行
WHOIS Server
列出与所选注册表相关的 whois 服务器。但请注意,有时它可能会过时或错误。您还可以通过对 TLD 进行 whois 查询来访问此数据whois.iana.org
,它将为您提供有关相关注册管理机构的数据,包括密钥中的 whois 服务器whois
。 - 还有一个技巧。如果您进行 DNS 查询(但请记住,这一点不会使第一点无效),
$TLD.whois-servers.net
它将为您提供 对应的 whois 服务器的名称$TLD
,作为 CNAME 记录。一些 whois 客户端可能会使用这一技巧,但我对此表示怀疑(GNUwhois
客户端可能是其中之一,也可能是 FreeBSD 客户端)。请注意,该举措纯粹是私人的,即使应该如此,也不是由参与所有这一切的最高机构(例如 ICANN 或 IANA)处理的。例如dig uk.whois-servers.net +short
会给你:whois.nic.uk.
。这样做的魅力在于,如果这种情况发生变化(非常罕见)或(更常见)当新注册管理机构/顶级域名 (TLD) 上线时,它应该进行更新。 - 一些注册管理机构使用专用 DNS 记录类型来发布其 whois 服务器地址端点,
SRV
以指定域名在何处处理特定服务。因此,如果您这样做,dig _nicname._tcp.fr +short
您确实会得到0 0 43 whois.nic.fr.
除了两个未使用的前两个数字(但可以用于负载平衡/故障转移)之外,还提供了要联系以获取的端口号(43
)和服务器名称,即其下的服务正式注册名称(whois.nic.fr
nicname
whois
https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml),对于fr
域。它没有被很多注册管理机构使用,但它应该被使用,SRV 记录准确地提供了这种分布式自动发现机制,甚至可以在 DNS 树的任何级别工作,因此它适用于注册管理机构和“子”注册管理机构等。
请注意,一旦 RDAP(一种较新的协议)取代 whois,上述许多内容都会发生变化。它已由多个 RFC 定义并由一些注册管理机构使用(在 RIR 的生产中,在某些域名注册管理机构的实验中),但尚未通过合同强制注册管理机构和注册服务商(出于非技术原因)在通用顶级域名 (gTLD) 中使用它世界,而 ccTLD 注册管理机构似乎不愿意放弃当前的 whois 服务器而改用 RDAP 服务器。
答案3
您的 WHOIS 客户端询问 WHOIS 服务器(在 TCP 端口 43 上),它会直接响应。Debian 的 WHOIS 客户端有一个硬编码的服务器列表它会自动从中选择。IANA 还提供 WHOIS 服务。
来源:RFC 3912