WHOIS 已经过时了,改用 RDAP:一个真正返回 JSON 的域名、IP 与 ASN 查询 API

每一个 WHOIS 解析器,本质上都是一堆正则在对付各家注册局各不相同的自由文本。RDAP 几年前就把这件事解决了,只是几乎没人注意到。本文讲清楚变了什么、为什么注册人联系方式是空的,以及如何用一个参数查询三种对象。
一句话总结
- •RDAP 是 IETF 为取代 43 端口 WHOIS 而制定的协议:通过 HTTPS 返回统一 schema 的结构化 JSON 和真正的 HTTP 状态码,而不是各家注册局格式各异的自由文本。
- •一个参数覆盖三种对象——传入 github.com、8.8.8.8 或 AS13335,查询类型会依据输入自动识别。
- •注册人联系方式通常缺失,这是设计使然。GDPR 之后,多数 gTLD 注册局只公布承办注册商和一个滥用举报联系人。这种隐去是注册局给出的答案,而不是 API 的缺陷。
- •未注册的域名返回 HTTP 200 且 found 为 false——这正是域名可用性的判断方式,属于真实答案,因此照常计费。只有上游故障才返回非 2xx,而那类情况不计费。
- •到期日在请求当刻直接取自注册局,中间没有缓存层,这正是每日轮询域名资产组合可行的原因。
协议换了,工具链没换
只要你写过消费 WHOIS 的代码,你就写过针对自由文本的解析器。Verisign 一种排版,Nominet 另一种,某个国家顶级域注册局又是第三种;字段时有时无;日期能有六七种格式。解析器一直能用,直到某家注册局改了个标签,然后它就悄无声息地什么也返回不了。
IETF 把这个问题解决了。RDAP——注册数据访问协议——通过 HTTPS 返回统一 schema 的结构化 JSON、真正的 HTTP 状态码,并正确处理国际化数据。多年来所有 gTLD 注册局都在合同上被要求运行它。协议早就赢了;落后的是工具链,这也是为什么至今仍有大量代码在调用 whois 命令再 grep 输出。
一个参数,三种对象
WHOIS / RDAP 查询只接收一个 query,并自动识别你给的是什么。
curl "https://www.apipick.com/api/whois?query=github.com" \
-H "x-api-key: $APIPICK_KEY"
{
"query": "github.com",
"type": "domain",
"found": true,
"registrar": "MarkMonitor Inc.",
"registered_at": "2007-10-09T18:20:50Z",
"expires_at": "2026-10-09T18:20:50Z",
"updated_at": "2024-09-07T09:16:32Z",
"dnssec": false,
"nameservers": ["dns1.p08.nsone.net", "ns-421.awsdns-52.com"],
"status": ["client delete prohibited", "client transfer prohibited"],
"contacts": [{ "roles": ["registrar"], "name": "MarkMonitor Inc.", ... }]
}改传 8.8.8.8,你会拿到所属分配网段、CIDR 块、持有者与 RIR 句柄。传 AS13335,你会拿到 AS 名称及其注册、滥用举报与技术联系人。同一个端点、同一种结构,客户端里不需要分支。
这一点为什么对 Agent 重要
对 LLM 来说,一个只有单个必填字符串参数的工具定义,远比三个近乎雷同、还要它自己去挑的工具好用得多。「查一下这个东西」在模型脑子里是一个能力,在 schema 里也就是一个能力,托管在 GET /api/whois/tool-schema。
那个没人喜欢的 GDPR 答案
所有人问的第一个问题都是:注册人去哪了。自 2018 年起,多数 gTLD 注册局会在公开 RDAP 中隐去注册人姓名、邮箱与通信地址,只公布承办注册商和一个滥用举报联系人。
留下来的信息依然有用,而且对多数真实场景来说,本来重要的就是这部分:注册年限、承办注册商、EPP 状态码、DNS 委派、DNSSEC 签名、到期日,以及一个能用的滥用举报联系人。
它真正能干的三件事
续费监控
每日轮询域名资产组合,针对 expires_at 告警。由于该值是在请求当刻从注册局读取而非取自缓存,你不会在过期数日之后才发现。
交易对手尽职调查
一个十一天前通过批量注册商注册、没有 DNSSEC、注册人使用隐私代理的域名,与一个 2007 年注册、设置了转移锁的域名,是完全不同的风险画像。registered_at 加上 status 一次调用就能回答,赶在你信任某张发票或通过某个供应商之前。
能送到人手上的滥用举报
把 IP 或 ASN 解析到持有者与滥用举报联系人,让自动化举报落进有人查看的邮箱。若同时需要知道该地址位于何处,可搭配 IP 地理定位。
可用性查询返回 200,不是 404
查询一个无人注册的域名,你会得到 HTTP 200 与 found: false。这是刻意为之。「该名称不存在注册记录」是一次成功返回了真实事实的查询——域名可用性判断正是这么做的——因此它和其他答案一样计费。非 2xx 只留给真正的上游麻烦:注册局超时或限流,而那类情况从不计费。
自己动手
| 直连 RDAP | 传统 WHOIS | API Pick | |
|---|---|---|---|
| 响应格式 | 结构化 JSON | 各注册局的自由文本 | 扁平 JSON |
| 找到服务器 | 自备并定期更新 IANA bootstrap | 各注册局专用主机 | 已处理 |
| 联系人 | 嵌套的 jCard 数组 | 对文本块写正则 | 展平后的对象 |
| 域名 + IP + ASN | 三条不同路径 | 三台不同服务器 | 一个参数 |
| 未找到 | 需要单独处理的 404 | 一句「No match」字符串 | 200 且 found:false |
| 限流 | 各注册局各异且无文档 | 相当激进 | 按账户计积分 |
直连 RDAP 其实是个完全合理的选择,数据也完全一致——两条路走的都是同一批注册局。你要额外承担的是 IANA bootstrap 表及其维护、jCard 展平、各注册局的限流,以及注册局把你转交给注册商自有服务器时的跳转链。
数据来源与授权
记录取自各对象的权威注册局:域名来自 Verisign、Nominet 等注册局运营方;IP 段与 AS 号来自 ARIN、RIPE NCC、APNIC、LACNIC 与 AFRINIC,通过 IANA 的 RDAP bootstrap 路由。不缓存、不二次发布——你看到的就是注册局在请求当刻返回的内容。每次调用 2 积分,只在成功时计费。免费 key 附带 100 积分,无需绑卡。
常见问题
RDAP 是什么,为什么我该弃用 WHOIS?
RDAP 即注册数据访问协议,是 IETF 指定的 43 端口 WHOIS 继任者。WHOIS 返回的是自由文本,排版因注册局而异,消费它就意味着要维护一堆解析器,而注册局稍微调整输出格式就会失效。RDAP 通过 HTTPS 返回统一 schema 的结构化 JSON,使用真正的 HTTP 状态码(含规范的 404),并且正确支持国际化数据。多年来所有 gTLD 注册局都被要求运行 RDAP——协议早就赢了,只是工具链没跟上。
为什么注册人姓名和邮箱几乎总是缺失?
因为 GDPR。自 2018 年起,多数 gTLD 注册局会在公开 RDAP 中隐去注册人姓名、邮箱和通信地址,只公布承办注册商与一个滥用举报联系人。这种隐去是注册局对该查询给出的答案,并非某个 API 的局限——任何服务商都无法展示注册局不公开的数据。号称能提供完整注册人信息的服务,通常是在提供 GDPR 之前的缓存记录,或来源存疑的爬取数据。
一个接口真的能同时处理域名、IP 和 AS 号吗?
可以。查询类型依据输入自动识别:github.com 按域名解析,8.8.8.8 或 IPv6 地址按 IP 网段解析,AS13335 或裸数字 13335 按自治系统解析。域名会返回 DNS 服务器、DNSSEC 状态与到期日;IP 会返回所属分配网段、CIDR 块与 RIR 句柄;ASN 会返回 AS 名称及其注册、滥用举报与技术联系人。对 LLM 来说,这意味着一个简洁的工具定义,而不是三个。
怎么判断一个域名是否可注册?
直接查它。未注册的域名会返回 HTTP 200,found 为 false,因为「不存在注册记录」本身就是真实答案,而不是错误。RDAP 上判断域名可用性正是这么做的。既然是真实结果,就会照常消耗积分;只有上游故障(例如注册局超时)才返回非 2xx,而那类情况从不计费。
到期日足够新,可以用来做续费监控吗?
它在请求当刻直接取自注册局自己的 RDAP 记录,中间没有任何缓存层,因此与注册局本身一样新。这正是它适合做监控的原因:每日轮询域名组合,针对 expires_at 告警。缓存型的 WHOIS 聚合服务可能滞后数日,而那恰恰就是一次被遗忘的续费演变成线上事故的时间窗。
本文涉及的 API
Sarah Choy 是 API Pick 的 CEO,专注于为 AI Agent 与 LLM 工作流构建可用于生产的 API。