1005 字
5 分钟
关于Whois查询那点事
2025-05-28

前言#

Whois查询是什么?#

如果了解域名,就知道域名一旦被注册就会在Whois服务器留下一些相关信息(比如:注册方,注册地,注册时间等等),可以被公开查询。

如何快速查询一个域名的Whois?#

你是否用过某些Whois查询网站?如图为IP.SB的WHOIS查询服务,可以通过 WHOIS - IP.SB 快速查询一个域名的Whois

正片#

那么如果我们想自建一个Whois查询服务放到我们的Bot或者网页上,我们要怎么做呢?

你也许已经知道在Linux系统上专门有一个包就叫做 whois 我们可以方便用它来查询Whois。我们现在就可以试试

可以看到,成功查询到了 baidu.com 的Whois信息。但是实际上这个命令的输出有这么长

但是实际上,只有红色框内的信息对我们有效,其他的信息则是一些公告,警示,许可之类的无用信息

这对于偶尔查询一次然后用人眼筛选有效信息的现代人类不难,但是对现代计算机来说非常难

因为在传统的Whois查询中,Whois服务器返回的信息没有任何规范,它想给你什么就能给你什么,如下图

这是我的域名的Whois查询结果,可以看到,完全没有规范可言

更有甚者不仅改格式,甚至还改术语,比如Status写一个Connect

这就使得我们做三方API的时候想要针对性的汉化或者过滤就非常困难。如果你想要做到绝对的规范,需要针对每一个顶级域的Whois服务器做调查,然后针对性的配置过滤器,这样才能输出一个完整的,规范的Whois查询结果

前文我提到了传统的Whois查询,那么有没有一个API能直接提供一个规范了格式的查询结果,并且每个域名都遵循这个规范呢?

有的,兄弟有的,这就是RDAP(Registration Data Access Protocol),注册数据访问协议。使用了RDAP的域名查询Whois将会返回一个标准的JSON格式的输出,并且查询是通过标准的RESTAPI,也就是Web协议,如下图

乍一看好多无用信息啊,但是你先别急,既然它返回的是JSON,而且所有域名都是一个规范,那么我们完全可以方便快捷的过滤

就像这样,只需要写一遍过滤规则,以后所有支持RDAP查询Whois的顶级域都可以通过这个规则快捷展示信息!

但是话又说回来,RDAP毕竟是一个新式协议,很多顶级域仍然不支持,比如 .im

.im Domain Delegation Data

可以看到 .im 仅支持传统Whois查询

那么我们的三方API就要既支持传统Whois,又支持新式RDAP

正式开始构建三方Whois查询API#

由于传统Whois查询是通过TCP请求43端口获取信息,需要专用客户端来查询,所以针对于只支持传统Whois查询的顶级域就需要我们的服务器先查询到信息,再返回用户纯文本。如下图

而对于已经支持RDAP查询的顶级域,直接返回Web URL,让用户自行阅览,如下图

另外,针对于仅支持RDAP查询的顶级域,我们需要先通过IANA查询该顶级域的RDAP服务器(实际上传统Whois也需要,但是Linux的Whois包硬编码的Whois查询服务器目前够用 :)

比如我要查询 freebird.day ,就需要先前往.day Domain Delegation Data查找

接下来通过给定的RDAP服务器查询即可

因为RDAP协议较新,且易读,所以针对于传统Whois和RDAP查询都支持的顶级域优先RDAP查询

关于Whois查询那点事
https://afo.im/posts/whois/
作者
AcoFork
发布于
2025-05-28
许可协议
CC BY-NC-SA 4.0