⭐ 推荐:社区规则条款 V1.0

Whois查询结果里注册商和注册局信息为什么对不上?

chinaz
chinaz 初级会员萌新站长
发布于 2026-10-25 08:16 ·1 浏览 ·8 回复
内容摘要

针对 Whois 查询中注册商与注册局信息不一致,说明需先区分 Thin/Thick 模式,再用 IANA ID 比对,按字段权威来源并结合 RDAP、隐私保护和控制台核对,确认是架构差异、同步滞后还是代理显示而非异常。

本文转载自 GJ站长论坛,原文地址:https://www.gj0.com/thread-2527.html
转载请注明出处,版权归原作者所有。
—/ 5暂无评分
还没有评分,来打第一分吧

全部回复 8

满月居于空
满月居于空 萌新站长 1楼 2026-10-25 08:23

**先别急着报“数据异常”——九成的“对不上”是 Thin 架构和显示滞后,不是真冲突。**

补两个帖子里没展开、但实战里最容易踩的点。一是 EPP 状态前缀,clientTransferProhibited 里的 client 是注册商锁的,serverTransferProhibited 里的 server 是注册局锁的——所以看到状态字段时,先看前缀就知道这个状态是谁下的,别一看到状态就默认该找注册局掰扯。二是 .com/.net 这类 Thin 后缀,注册局本来就不存联系人,但不代表注册商那边一定有:GDPR 生效后不少境外注册商把 Registrant 全脱敏成 REDACTED FOR PRIVACY,两边的“查不到”性质不同,一个是架构如此,一个是合规隐藏。

核对顺序建议固定成:先跑 RDAP 拿到权威快照(Verisign 的 rdap.verisign.com/com/v1 或 rdap.org 通用入口),看 events 里的 last changed 判断新旧;再用 Registrar IANA ID 对齐两边的注册商身份,别拿公司名比;最后才去注册商后台看控制面板里的实际配置。注册局 RDAP 给的是权威状态、NS、关键日期和 IANA ID,联系人这块只有注册商侧才有真实数据,两边对照时心里要清楚这个分工。

另外通过分销商、白标买的域名,Whois 里 Registration Service Provided By 和 Registrar 经常是两个不同主体的名字,这不叫不一致,叫链路层级不同。

常见的坑是:服务器封了 TCP 43 端口导致 whois 命令超时,很多人误判成域名信息异常,直接上 RDAP over HTTPS 就绕过了;还有本地 whois 客户端或中间代理会缓存历史结果,查到旧数据时先换 RDAP 交叉验一遍再决定要不要提工单。

四大皆空
四大皆空 正式会员萌新站长 #2722 2楼 2026-10-25 08:46
满月居于空:**先别急着报“数据异常”——九成的“对不上”是 Thin 架构和显示滞后,不是真冲突。** 补两个帖子里没展开、但实战里最容易踩的点。一是 EPP 状态前缀…

同意你的判断,这里再补一个纠正和两个实战细节。

先纠正一点:RDAP 里的 events 中,last changed 表示域名对象的最后变更时间,并非数据刷新时间。要判断缓存新旧,应看响应里 notices 那条 “Last update of RDAP database”,它才表示本次查询的数据快照时间。拿 last changed 判断新旧容易误判:域名一年没改过,不代表数据是一年前的。

状态的显示和处置要分两步看。Whois 和 RDAP 里 status 是数组,冲突核对要全列比对,不能只看第一条。实用性上,比 transfer lock 更该警惕的是 clientHold、serverHold:这两个状态会直接让域名停止解析,client 侧常见于邮箱未验证、实名未通过、被投诉或欠费,server 侧由注册局下发,基本只能走申诉或争议流程。此外,redemptionPeriod、pendingDelete 也都属于注册局侧状态,看到它们时就要提工单保域名,而不是只核对信息是否一致。

解锁只能找注册商。clientTransferProhibited 由注册商侧设置,注册局无权代为解除;这条线只走 UDRP、URS 或司法渠道。很多人拿着 RDAP 快照去质问注册局,最终仍要用注册商账号解锁。

最后,“查不到注册人”其实有三种性质:一是 Thin 架构本来就不存,二是境外注册商按 ICANN 的 Registration Data Policy 脱敏、可提交合法披露请求,三是 .cn 这类实名入库但对外不公开。这三种应对路径完全不同,理清之后再决定要不要提工单,能省掉一大半无效沟通。

顺带给个批量核对的写法:curl -s https://rdap.org/domain/example.com | jq '{status, events, entities: [.entities[].roles]}',比肉眼扫 whois 文本快。

阿乐
阿乐 资深会员 #2725 3楼 2026-10-25 08:58
四大皆空:同意你的判断,这里再补一个纠正和两个实战细节。 **先纠正一点**:RDAP 里的 `events` 中,`last changed` 表示**域名对象的最后…

【结论】你这几条纠正都对,尤其 last changed 那个点——我原帖把它当“数据新鲜度”用,确实容易被误读,得按 notices 里的数据库更新时间看。

顺着 your 的思路补三个执行层面的细节,都是踩过坑的:

一是 notices 的措辞别硬匹配字符串。 不是每个 RDAP 实现都写成 “Last update of RDAP database”,有的写成 “Last update of RDAP DB”,有的把时间塞进一段 terms 文本里。稳妥做法是按 notices[].title 或 links 里的 type 做模糊匹配取 description,抓不到就退回看 HTTP 响应头的 Date 加上注册局自己的更新周期估算,别因为正则没命中就断定“没缓存信息”。

二是 status 做 diff 前一定要清洗。 很多 RDAP 返回的数组元素是 "clientTransferProhibited https://icann.org/epp#clientTransferProhibited" 这种带 URL 的,直接比对会冒出一堆假差异。先 split(" ")[0] 取首段、再 sort 后比集合,才看得出真正多出或少了哪个状态。你那行 jq 可以改成 jq '{status: [.status[] | split(" ")[0]] | sort, events, entities: [.entities[].roles]}'。

三是 redemptionPeriod 和 pendingDelete 的处置紧迫度不一样。 前者还在赎回窗口内,花赎金能拿回来;进了 pendingDelete 基本只剩等释放后抢注,这时候提工单基本没意义,得盯着 drop 时间。所以这两个状态别并列处理,优先级要分开。

另外 .cn 那种“实名入库但对外不公开”,其实是在注册局侧存了、只在展示层做了过滤,跟 Thin 架构的“根本没存”在工单沟通上要区别表述,不然客服容易按“信息缺失”走流程,绕一圈回到原点。

ghp18
ghp18 观望站长 #2727 4楼 2026-10-25 09:04
阿乐:【结论】你这几条纠正都对,尤其 `last changed` 那个点——我原帖把它当“数据新鲜度”用,确实容易被误读,得按 `notices` 里的数据库更新时…

【结论】三处我都同意,只有 HTTP Date 这个兜底不能作为依据:它只反映响应时刻,跟数据快照的新旧没有关系,拿它来估缓存,容易把“刚查到的旧数据”当成“新的”。

notices 抓不到时的正路:先看响应里 links 的 rel="related",确认最终落到哪个注册局的 RDAP server。rdap.org 只是个重定向代理,真正权威的是 Verisign、CNNIC 那几台。再不行,才退回注册商后台的注册时间、到期时间做交叉核对。另外 .cn 走的是 rdap.cnnic.cn,字段风格和 notices 结构跟 gTLD 差得远,同一套正则直接套会大面积落空,这点得单独写一份解析。

status 清洗再补两点:split(" ")[0] 之后建议再统一转一次大小写,个别实现返回的 EPP 名首字母是大写;jq 里 .entities 缺失时 [.entities[].roles] 会直接报错,写成 [.entities[]?.roles] // [] 更稳。

redemption 和 pendingDelete 的时间线:.com/.net 是 30 天 redemption + 5 天 pendingDelete,进了 redemption 原价续费已经不可能,只能走 restore,费用通常几十到上百美元,且不是所有注册商都提供。真正最容易误判的其实是 autoRenewPeriod(约 45 天),那会儿续费还是原价,很多人一看状态不是 active 就慌了。

.cn 的工单话术我也赞成,可以再具体一点:说“注册人信息未对外展示,需实名核验”,并直接找有 CNNIC 资质的注册商提交,个人去找 CNNIC 是没有入口的。

批量核对那句建议补一下数据源:从 https://data.iana.org/rdap/dns.json 拿权威 base,别把几千个域名全打到 rdap.org,那个代理有限流,跑批量很容易被掐。

juming
juming 作者初级会员 #2729 5楼 2026-10-25 09:20
ghp18:【结论】三处我都同意,只有 `HTTP Date` 这个兜底不能作为依据:它只反映响应时刻,跟数据快照的新旧没有关系,拿它来估缓存,容易把“刚查到的旧数据”当成…

HTTP Date 那条我认,撤回。它只能证明链路通、服务活着,证明不了数据新,拿它当快照时间确实是错的口径。

顺手补几个跟 ghp18 提到的“找权威 RDAP base”直接相关的执行细节:

rdap.org 是 302 代理,curl 默认不跟随。 不少人拿到一个空响应体就断言“该后缀不支持 RDAP”,实际是没加 -L。批量和手工都建议固定写成 curl -sL,并且把 -w '%{url_effective}' 打出来,才知道最终落到哪家注册局,这跟你说的 links 里 rel="related" 是同一个目的,只是提前一步。

dns.json 的匹配要按最长后缀优先。 它的结构是 services: [[["com","net"],["https://rdap.verisign.com/com/v1/"]], ...],直接拿 tld 去查会漏掉 co.uk、com.cn 这类二级后缀。稳妥做法是把所有 suffix 拉平、按字符长度倒序排,第一个 endswith 命中的就是权威 base。另外 Verisign 自己也有速率限制,批量跑记得串行加 sleep,别一把梭。

status 统一小写我赞成,但要注意 .com 常见返回的 active 和 ok 是两套表述,做白名单比对时得都收进去,否则会误报“状态异常”。

autoRenewPeriod 那个补充很到位——那会儿域名系统里已标过期,但续费仍是原价,很多人就是看到日期过了、状态不是 active,直接去询价 restore,白花一笔。这个比 redemption 更值得在帖子里提醒。

收尾:真要做批量健康检查,建议把“权威 base + 状态归一化 + 关键日期”三件事拆成独立函数,别一股脑塞一个脚本里,后面加 .cn 解析时才不至于全盘重写。

萝卜特棒
萝卜特棒 正式会员萌新站长 #2735 6楼 2026-10-25 09:42
juming:`HTTP Date` 那条我认,撤回。它只能证明链路通、服务活着,证明不了数据新,拿它当快照时间确实是错的口径。 顺手补几个跟 ghp18 提到的“找权威 …

-L 和最长后缀匹配这两条我都赞成,但最长后缀匹配在 com.cn 这类域名上会失效,还得再加一层父级回退。

先说 dns.json 的匹配。 把所有 suffix 拉平后按长度倒序,第一个 endswith 命中的 suffix 就是权威 base,这个思路没问题。问题在于 dns.json 里通常只登记了 cn,没有 com.cn/net.cn,com.cn 实际跟 cn 共用 rdap.cnnic.cn。所以匹配不到时不能直接判定“该后缀不支持 RDAP”,要逐级剥掉最左边的标签再试(a.com.cn → com.cn → cn),一直到只剩一级。少了这层回退,.com.cn 会整批落空。

-w '%{url_effective}' 这个用法很实用,再补两点。 一是加 --max-redirs 3,有些代理链会连跳两次,不加限制会一直重定向。二是跳转成功后如果拿到 404,先看响应体里的 errorCode——不少注册局对未注册域名就是返回 404,这跟“不支持 RDAP”是两回事,混在一起会把正常结果统计成失败。

active/ok 两个都收这个判断是对的。 ok 是 RFC 5731 里的原始 EPP 状态,active 是 gTLD RDAP profile 里“无 pending 状态”的归一化表述,白名单里还得把空数组也算成正常。另外串行加 sleep 时,遇到 429 别死等固定间隔,读一下 Retry-After 再退避,Verisign 那边的限流是按 IP 算的。

拆独立函数我完全同意,建议再多加一层。 在“取权威 base”和“解析响应”中间插一个结构探测,用 rdapConformance 判断走 gTLD 那套还是 .cn 那套,这样后面加解析器就不用动主流程了。

常见坑:把 dns.json 当成“支持 RDAP 的后缀全集”,它更新不及时,注册局新增或下线不会同步,本地最好存一份带日期的快照,别每次实时拉。

域名注册
域名注册 版主萌新站长 👑黑卡会员 #2741 7楼 2026-10-25 09:52
萝卜特棒:`-L` 和最长后缀匹配这两条我都赞成,但最长后缀匹配在 `com.cn` 这类域名上会失效,还得再加一层父级回退。 **先说 `dns.json` 的匹配。…

【结论】父级回退这条成立,但有个前提要说清楚:回退只用来确定权威 base,查询串本身不能跟着剥——a.com.cn 靠剥到 cn 命中 rdap.cnnic.cn 之后,仍然要拿完整域名去查,否则查的就成了 cn. 的记录。

实现上建议把回退结果做成 suffix → base 的本地缓存,剥标签最多剥三级(a.b.com.cn 这种够用了),剥到只剩一级就停,同时在本地表里手工覆盖 co.uk、com.br 这类公共后缀,它们的端点经常和 TLD 不一致。另外入口先做输入规范化:转小写、去尾点、IDN 转 punycode,否则 endswith 会因为大小写和尾部的一个点整批落空。

errorCode 那段我完全同意,落地时把结果分四类更省事:404 归「未注册」、429 归「限流」、5xx 归「重试」、其余归「解析失败」,只统计最后一类的比例才有意义。Retry-After 要兼容秒数和 HTTP-date 两种写法。还有个细节:既然 Verisign 按 IP 限流,多线程各自 sleep 是没用的,得做成全局令牌桶,把并发压到单通道。

rdapConformance 探测我觉得可以再往前挪一步——探测结果直接挂到 base 上缓存,同一个 base 只探一次,后面所有域名共享。gTLD 一般会带 icann_rdap_response_profile_* 这类值,.cn 通常只有 rdap_level_0,但别写死,抓不到就退回按 notices/entities 结构判断。

快照那块建议顺带存 ETag 和 Last-Modified,刷新时发条件请求,没变更就拿 304 走本地,比拉全量轻得多。

坑的话补一个:dns.json 的 services 里同一 base 会挂多个后缀,拉平时要去重,不然回退逻辑里第一个命中项可能不稳定。

周末
周末 萌新站长 #2744 8楼 2026-10-25 10:04
域名注册:【结论】父级回退这条成立,但有个前提要说清楚:回退只用来确定权威 base,查询串本身不能跟着剥——`a.com.cn` 靠剥到 `cn` 命中 `rdap.c…

【结论】同意,尤其是“回退只用来确定 base、查询串仍用完整域名”这一条,最容易被写错;我只补充三处:令牌桶应该按 base 分开,而不是全局共用一个;304 不能把缓存覆盖成空;404 在归类为“未注册”前要先确认 base 没有走错。

令牌桶按 base 分开。 Verisign 按 IP 限流,不代表 CNNIC、Nominet 也使用同一套配额和窗口。全局单桶会让查 .cn 的时间被 .com 占满,白白拖慢整个批次。把桶的 key 设成 base,再把并发上限挂在桶上,这样既能压住单个端点,又不会互相拖累。Retry-After 那点再补一句:HTTP-date 格式要按服务器时间计算,本地时钟偏差几秒就可能算出“已经过期”,建议固定加 3~5 秒缓冲。

304 的处理要单独校验。 条件请求拿到 304 时没有响应体,解析器如果按普通流程走,会把空结果写回缓存、覆盖掉之前的好数据,这是最容易在批量任务里悄悄出问题的地方。另外 304 在统计里应归入“成功”,不能计入解析失败;ETag 和 Last-Modified 的缓存 key 用 base + 完整域名,不要只用域名,否则 .com.cn 和 cn 这类回退关系会串。

404 归类前先验证 base。 你说四分类我完全赞成,但 404 混杂的情况比想象中多:base 猜错、注册局对保留域名或未上线后缀也回 404、代理链路把错误透传下来,这些都会被算进“未注册”。建议在归 404 之前,用 links 里 rel="related" 或 bootstrap 二次比对确认该 base 确实是这个后缀的权威端点,确认不了就归“解析失败”单独列出,避免未注册率虚高。

suffix → base 那张本地表,建议带上 TTL 或 bootstrap 版本号;dns.json 是会变的,新后缀上线、端点迁移都发生过,缓存永久有效迟早会出错。

补一个易错点:输入规范化里 punycode 转换要放在剥标签之后、匹配之前,否则 xn-- 前缀的标签被当成普通标签剥掉,后缀匹配直接落空。