I am LAZY bones?
AN ancient AND boring SITE

2026年 06月 11日 的归档

whois 不让用了?聊聊它的接班人 RDAP

起因是最近我的域名要过期了,在操作续费(顺便还换了个注册商)的过程中,习惯性地敲了个 whois:

被拒了。换 whois 服务器、加参数,都是同一句话:请去网页上查。哈哈,用了快二十年的命令,说不让用就不让用了。

查了一下才知道,.li 域名的注册局是瑞士的 SWITCH(和 .ch 同一家),他们已经把传统的 43 端口 whois 服务关掉了,只留了个带验证码的网页查询入口(甚至whois返回的网址都是错的…)。原因也不难猜:一是 GDPR 之后,欧洲的注册局对注册人信息的批量获取管得很严,而 whois 这个协议天生没有任何访问控制,谁都能无限爬;二是网页入口可以加验证码和限流,挡掉数据挖掘的脚本。

那命令行党就没活路了吗?还真有——RDAP。

RDAP 是什么

一句话概括:RDAP 就是基于 HTTPS + JSON 的 whois。

whois 这个协议是 1982 年的产物,比 DNS 还老。它的问题攒了几十年:输出格式没有任何标准,每家注册局返回的文本长得都不一样,想程序化解析就得给每家写一套正则;协议里压根没有字符编码的概念,中文注册人姓名怎么显示全看运气;更要命的是没有认证和权限控制,这也是 GDPR 之后各家注册局纷纷关门的直接原因。

IETF 在 2015 年发布了 RDAP(Registration Data Access Protocol)来接班,核心就是 RFC 7480 那一组标准。ICANN 从 2019 年起强制要求所有 gTLD 注册局和注册商部署。所以 .com / .org / .net 这些域名,现在都有标准的 RDAP 接口可以查。

怎么用

不需要装任何东西,一个 curl 就够了:

返回的是规规矩矩的 JSON。我自己这个域名查出来大概长这样(节选):

注册商、注册日期、NS、状态,一目了然。所有时间都是 ISO 8601 格式,状态码用的是标准的 EPP 状态(active、client transfer prohibited 这种),不再是各家自己发明的描述。对写脚本的人来说,这比解析 whois 文本舒服太多了。

顺便发现一个副作用:查一个没注册的域名,RDAP 直接返回 HTTP 404。所以拿状态码就能批量探测域名是否被注册,连响应体都不用解析。

不用记每家的地址:Bootstrap 机制

用 whois 有个老问题:你得先知道该问哪台服务器。查 .com 要问 Verisign,查 .org 要问 PIR,记不住。

RDAP 把这事标准化了。IANA 维护着一份 dns.json,里面列着每个顶级域对应的 RDAP 服务地址:

客户端缓存这份文件,就能自动路由到正确的服务器。嫌麻烦的话,直接用 rdap.org 这个公共服务,它帮你做转发:

查任何域名都是这一个入口,再也不用记谁家域名归谁管了。

那些 xn-- 开头的乱码是什么

翻 dns.json 的时候会看到一堆奇怪的顶级域,比如 xn--kpry57d、xn--fiqs8s。这不是乱码,是国际化域名(IDN)的 Punycode 编码。

DNS 天生只认 ASCII,但域名总不能只让用拉丁字母。于是有了 Punycode:把 Unicode 字符串编码成纯 ASCII,再加个 xn-- 前缀。解码出来其实都是各国文字:

想自己玩的话,Python 一行就能互转:

RDAP 对这个的支持也很到位:响应里同时给 ldhName(ASCII 形式)和 unicodeName(Unicode 形式)两个字段,客户端想显示哪个自己挑。而 whois 协议连编码都没定义,IDN 的处理完全看各家心情。

隐私这块儿

GDPR 干掉了 whois 里的注册人信息,RDAP 则把”隐藏”这件事做成了标准。响应里有个 redacted 数组,明确列出哪些字段被隐藏了、用的什么方式(整个移除、替换成占位值、还是置空),机器可读。需要完整数据的执法机构或商标方,可以走认证通道申请。这套分级访问的设计,whois 是完全做不到的——它只能简单粗暴地把字段换成 REDACTED FOR PRIVACY,别的什么都表达不了。

踩到的坑

也不是处处顺利。RDAP 标准归标准,各家实现的完整度差很多:

1. ccTLD 不强制部署。gTLD 是 ICANN 管的,必须上 RDAP;但国家域名各自为政,有的部署了,有的没有,有的部署了但缺斤短两。

2. 比如 .li / .ch 的 RDAP 就不返回到期时间。events 里只有 registration,没有 expiration,想知道域名什么时候过期,还是得去注册商后台看。而 .com / .org 的 RDAP 是给全的。

3. 注册局和注册商是两级数据。注册局(Registry)的 RDAP 只有基本信息,更详细的注册人信息要顺着响应里 rel 为 “related” 的链接去注册商(Registrar)的 RDAP 再查一次。

4. 部分url有反爬机制,直接用curl会失败,如果失败可以试试正常用浏览器打开。

最后

RDAP 其实没什么革命性的东西,本质上就是把四十多年前的纯文本协议用 HTTPS + JSON 重写了一遍。但恰恰是这种”无聊的现代化”,把格式混乱、没法国际化、没有隐私控制这几个老大难问题全解决了。另外它不只能查域名,IP 地址和 AS 号也是同一套协议(curl rdap.org/ip/8.8.8.8 试试),五大 RIR 都已经支持了。

以后再想 whois 什么东西,可以先试试 curl rdap.org。毕竟传统 whois 关一家少一家,而 RDAP 才刚刚开始。

就此,完毕。