OneFour 实战:用 RDAP 并发批量检测域名后缀可用性
你有没有过这种经历——脑袋里蹦出一个特别满意的项目名兴冲冲跑去注册 .com结果显示“已被注册”。换 .net被抢了。再试 .cn显示被暂停解析。最后只能逐个打开在线查询工具来回切换、反复点“查询”磨了半小时才发现某个偏僻后缀还能用。这种体验做过独立开发者、跨境电商或任何需要“先注册域名再做事”的人应该都不陌生。域名后缀检测的最优解不是一个个查而是批量查。我最近用到的一个开源小工具 OneFour 就是把这件事做成了“一条命令搞定”输入一个主域名词它会自动拼接几百个常用后缀并发检测哪些还能注册、哪些已被占用、哪些属于保留域。这篇文章我会把它的需求背景、核心原理、完整实操流程以及我实际跑的时候踩过的坑都写清楚新手照着抄就行。1. 批量域名后缀检测的需求场景与核心痛点1.1 为什么单后缀查询会让人抓狂很多人习惯先查 .com被注册就从头开始想新名字这是最浪费时间的方式。一个主名字往往有几十甚至上百个可用后缀.com 没了不代表 .io 也没了.net 被占了不代表 .dev 還空着。问题是大部分在线查询工具一次只能查一个后缀查完一个再换一个中间还要反复输入验证码明明两秒能出结果的查询硬拖成五分钟。更让人挫败的是当你终于找到一个可注册后缀打开注册商页面输入时却发现“刚刚还可注册结算时已被抢注”——这种情况在知名后缀上特别常见因为很多抢注脚本在实时监控公开查询接口你的查询动作本身就在给别人制造机会。1.2 什么情况下必须用批量检测我自己总结下来下面几类场景几乎离不开批量检测。第一类是品牌起名期。做一个新产品、新应用或新品牌之前通常要准备一组候选名然后对每个名字检测全后缀。比如你一共有 5 个候选名每个候选名查 50 个后缀单独手动查就是 250 次请求批量工具只要一个循环就能跑完结果还能直接对比排序。第二类是域名投资和资产盘点。手上有几个域名想处理或者想看看某个行业的“优质域名池”需要快速知道哪些后缀还有货。没有批量检测这项工作基本靠人工一个个点难以持续。第三类是寻找替代后缀。当 .com 被注册后很多人不是换名字而是换后缀。批量检测可以一次性给出这个主名在 .net、.org、.io、.dev、.app、.xyz、.top、.tech 等后缀下的注册状态找出那个“还没人抢的备选”然后直接注册。OneFour 在这个场景里的价值就是两个字提速。同时因为它保留了一些过滤和排序逻辑结果出来以后你不用再对着表格逐条人工判断省下的时间可以拿去想产品本身。2. 技术方案与核心原理拆解2.1 为什么优先用 RDAP 而不是传统 WHOIS写批量检测工具第一个要决定的事情是到底走什么协议去查询。传统 WHOIS 走 TCP 43 端口发一段文本过去服务器回一段文本解析靠正则而且每个后缀的返回格式都不一样。有的把注册人信息放在“Registrant Organization”有的放在“org”有的干脆用“Registrant Name:”开头。更要命的是不少服务商出于隐私保护或负载考虑对 43 端口的访问做了限制遇到查询频率稍高就直接断连。还有一个大坑WHOIS 在不同地区的结果不一致同一个域名可能在一个查询端显示可注册在另一个端显示已注册非常考验心态。RDAP注册数据访问协议是 WHOIS 的现代替代方案基于 HTTP返回结构化 JSON 数据。它的查询路径遵循一个固定格式你只要知道某个后缀的 RDAP 服务基础地址就能统一拼出查询 URL。对同一个域名在同一个后缀下查询不同服务商的结果格式是标准化的不再需要为几十个后缀各写一套解析规则。OneFour 的查询模块就是围绕 RDAP 设计的逻辑非常清晰向目标后缀的 RDAP 域名查询接口发一个 GET 请求如果返回 404说明该后缀下没有这个域名的注册记录大概率可以注册如果返回 200说明已经有注册数据状态字段里还能看出是“活跃”“保留”还是“禁止删除”等状态。2.2 并发模型与参数计算批量检测的核心难点不是“发请求”而是“同时发很多请求还不被限流”。OneFour 的默认并发数我建议设置在 10 到 20 之间太低浪费等待时间太高容易触发服务方的限流机制。我们可以简单算一笔账。假设要在 8 秒超时、3 次重试、每次重试退避 2 秒的条件下检测一个主域名在 300 个后缀下的状态。如果串行跑以平均每个请求 1.5 秒计算总耗时为 300 × 1.5 450 秒也就是 7.5 分钟。如果并发 12耗时降到 450 ÷ 12 ≈ 37.5 秒左右。如果再考虑部分请求失败需要重试串行可能会到 10 分钟以上而并发方案通常能控制在 1 分钟内。这就是批量工具带来的实际体验差异。并发数量的选择还要考虑目标服务器。不同后缀的 RDAP 服务方并不是同一家有的响应很快有的则非常慢。OneFour 里我把并发数放到了配置文件中第一次跑建议用 10带上超时和退避参数看整体耗时再逐步调整。我的经验是控制在 16 以下最稳妥超过 20 之后获得的速度提升很小反而更容易出现连接被重置。2.3 保留域名与合法性过滤逻辑批量检测最容易出错的地方不是查询而是没有过滤那些“根本不可能注册”的域名。某些字符串在整个域名体系里被规则保留无论哪个后缀都不可能注册到。比如某些技术规范和品牌保护清单里的名字有些是 RFC 规则明确保留有些是各后缀注册局自己设置的保留列表。如果不过滤检测结果里会混入大量永远查不到或永远显示“可注册”的假象浪费你的时间。OneFour 在处理时做了两层过滤。第一层是语法合法性校验主域名词必须符合域名标签的基本规则长度不超过 63 字节不能以连字符开头或结尾不能全数字大小写归一化。第二层是保留名单检查把已知的保留域名列表内置到配置中遇到保留名单里的词直接跳过查询并在结果里标记为“保留”。这样做的好处是输出的表格里每一行都是真实可操作的候选而不是一堆需要你再人工二次排查的噪音。3. OneFour 实操构建、配置与使用全过程3.1 环境准备与模块安装OneFour 是一个命令行工具使用 Python 编写依赖的核心库只有官网身体安装过程很常规。你需要一个 Python 3.9 以上环境以及三个第三方模块aiohttp 用于异步 HTTP 请求、asyncio 编排出并发、csv 模块用于导出结果。安装命令很简单pip install aiohttp不需要额外装框架。项目本身是单文件脚本外加一个配置文件目录结构类似下面这样onefour/ ├── onefour.py ├── config.json ├── tld_list.txt └── output/一份可用的配置文件长这样{ candidate_tlds: [com, net, org, io, dev, app, xyz, top, tech, cc], concurrency: 12, timeout_seconds: 8, retry_count: 3, retry_backoff_seconds: 2, output_format: table }其中 candidate_tlds 就是你要检测的后缀列表。我建议先放自己真正会用到的几十个后缀而不是一上来就把几千个后缀全部跑一遍。第一轮用 10 到 20 个覆盖主力后缀第二轮再扩展到全部公开后缀这样排查结果更可控。3.2 配置后缀列表与检测参数后缀列表可以手动维护也可以拉取一份公开的后缀列表放到 tld_list.txt 里。OneFour 默认会先读取配置文件中的候选后缀再合并 tld_list.txt 中独有的项自动去重。如果你不想维护整个后缀数据库只想查某个具体后缀直接在配置文件中指定即可。我个人在实际使用中会按“主力后缀”和“潜力后缀”两组分别建两个配置文件。主力后缀组包含 com、net、org、io、dev、app适合品牌投放潜力后缀组包含 xyz、top、online、site、tech、cc、me适合低成本占位。这样跑一次不会输出太多噪音而且结果可直接对应不同的注册策略。超时参数是紧接着要考虑的。默认 8 秒是我在一轮测试中得出的折中值有些公用的 RDAP 接口在高峰期响应特别慢8 秒能覆盖大多数情况如果设成 3 秒可能有一半请求被误判为失败重试次数变多总耗时反而更长。建议初学者保留默认值等跑顺了再根据自己的网络手感去调。3.3 命令行运行与结果解读在配置好之后运行方式是很直接的python onefour.py example其中 example 是你要检测的主域名词。OneFour 会先做本地过滤然后并发查询所有候选后缀最后在终端打印表格同时把完整结果写入 output 目录下的 CSV 文件。终端表头如下主域名后缀完整域名状态备注examplecomexample.com已注册可能存在已有站点exampleioexample.io可注册建议尽快操作exampledevexample.dev可注册需实名信息exampleappexample.app可注册强制 HTTPS这里的“状态”列是 OneFour 根据 RDAP 返回结果自动判定的。返回 200 且 status 字段包含 active判定为已注册返回 404 判定为可注册如果请求超时或遇到临时故障判定为待复查。备注列则输出一些辅助信息比如返回了注册日期、域名是否在保留名单中、是否属于新通用顶级域等。看到“可注册”不要马上头脑发热先去注册商搜一下价格再决定。3.4 CSV 输出与注册前的二次确认终端表格适合快速浏览真正用于决策的是一个带完整备注字段的 CSV 文件。OneFour 生成的 CSV 会包含这些字段主域名、后缀、完整域名、RDAP 查询地址、返回状态码、注册日期、过期日期、最后修改日期、判定状态、备注。有了这些原始数据你可以按“可注册”过滤再把结果按“主流后缀優先”和“注册价格从低到高”排序最后决定注册哪个。二次确认是必须的。RDAP 返回 404 只能说明“在查询的那个注册数据库里没有记录”并不百分百代表全域都可注册因为某些后缀有多个注册商数据同步存在延迟。我在实际使用中会随机抽取结果列表里最想注册的几个域名去注册商页面再真实查询一次。两次结果一致才下单。这个过程不要省尤其是新通用顶级域数据刷新比 .com 慢得多。核心查询部分的实现思路也不复杂可以和读者分享一下。OneFour 在每个并发任务里做的事情本质上就是拼 URL、发起 GET、判断返回。代码结构可以简化成下面这个样子async def check_one(session, name, tld, rdap_base): url f{rdap_base}/v1/domain/{name}.{tld} try: async with session.get(url, timeoutaiohttp.ClientTimeout(total8)) as resp: if resp.status 404: return {name: name, tld: tld, status: 可注册} if resp.status 200: data await resp.json() return {name: name, tld: tld, status: 已注册, events: data.get(events, [])} return {name: name, tld: tld, status: 待复查, note: fhttp status {resp.status}} except Exception as e: return {name: name, tld: tld, status: 待复查, note: str(e)}把查询函数写成独立异步函数之后再用一个信号量去控制最多同时跑多少个任务主程序把所有任务塞进事件循环这里用到的“信号量”机制就相当于一个闸口同时只放行 N 个请求超过的排队等待。这个方法特别好用它既保留了并发带来的速度优势又不至于因为一次性发出 300 个请求而把服务方惹毛。4. 高频问题排查与独家避坑技巧4.1 结果“假阴性”与“假阳性”的判断我在跑这个工具的过程中遇到最多的就是“假阴性”和“假阳性”。所谓假阴性就是结果判定为“可注册”但实际已经被人注册了常见原因包括RDAP 服务商数据同步慢某个域名刚被注册注册局还没来得及更新或者该域名的注册信息被隐私保护服务隐藏某些查询端为了隐私直接返回 404。这类情况在知名后缀里相对少但在新顶级域里非常多。解决办法是把结果中你最在意的域名拿出来到注册商网站二次确认如果注册商显示“已注册”以注册商页面为准。假阳性则相反结果显示“已注册”但实际上是你的主域名词撞上了保留域名或撤回域名。比如有些后缀的注册局会把一部分名字列为“等待删除”或“注册局持有”状态RDAP 返回的是 200但你在注册商那里根本买不到。遇到这种结果不要浪费时间删除即可。为了减少假阳性我建议在配置里打开“启用保留名校验”开关。这个开关会让 OneFour 在查询前先把主域名词和已知保留名单比对命中就直接标记为保留不发起网络请求既省时间又减少误报。4.2 并发限流与超时问题实测刚开始跑 OneFour 时我用的是 30 并发结果大量请求返回 429 或 503。429 是服务器明确告诉你“请求太多”503 则是服务临时不可用。此时如果继续硬跑只会越来越糟。后来我把并发降到 12并在每次请求失败后退避 2 秒重试整体速度反而比 30 并发快了很多。这里有个反直觉的点并发数不是越高越好。网络请求存在边际收益递减并发从 1 提升到 10耗时可以缩短 8 倍从 10 提升到 30可能只缩短 20%但触发限流的概率会增加数倍。不同后缀的 RDAP 服务方限流策略完全不同有的按 IP 级别限制每分钟 60 次有的按单个 URL 限制每分钟 10 次。你没法预知只能通过退避和重试机制去适配。我实测后比较推荐的参数组合是并发 12、超时 8 秒、重试 3 次、退避 2 秒。这个组合在我测过的几百个后缀里都没有触发严重限流耗时也在可接受范围。如果你要跑的后缀数量超过 500建议把并发降到 10然后分两批跑中间休息 5 秒。4.3 跑完第一轮之后需要调整的三个细节用 OneFour 跑了第一轮之后我发现有几个细节值得立刻优化。第一个细节是后缀排序。默认按字母序输出结果这在筛选时很费眼。建议把 com、net、org 这类高价值后缀排在最前面方便第一时间看到“经典后缀还有没有戏”。OneFour 支持在配置文件中设置 priority_tlds 字段填上你心中优先级最高的后缀输出时会自动排到表格上方。第二个细节是中文域名和国际化域名的处理。如果你要检测的主域名词包含中文或其他非 ASCII 字符查询前需要转换成 punycode也就是以 xn-- 开头的形式。不转换的话RDAP 接口很容易返回 400 或 404你会误以为这个域名完全不可用。OneFour 内置了一个转换函数但我建议你在配置里显式开启国际化域名支持因为转换后输出的域名可读性会差一截你需要在“可读性”和“可用性”之间做一个权衡。第三个细节是文件夹管理。如果长期使用 OneFour 做批量检测建议让每次运行的结果都自动存进以日期命名的子目录比如 output/2025-06-14/。这样你不会在下一次运行后找不到上一次的结果。另外CSV 中如果同时检测多个主域名词建议把主域名作为第一列方便用数据表工具做透视。最后再分享一个小技巧OneFour 本质上只是把“查询动作”本身自动化了它不能替你做决策。不要一看到结果列表里有一堆“可注册”就全部注册。我的习惯是把第一轮结果存档隔 12 到 24 小时再跑一次同样的检测对比两次结果中“可注册”的域名是否有变动。如果两次结果一致说明这些域名状态稳定可以从中挑选注册如果第一次显示可注册、第二次显示已注册说明这个主域名词竞争激烈你要么立刻决定注册要么干脆放弃换一个方向。这种“先批量筛选、再二次确认、最后间隔复检”的流程能帮你避开大多数注册人抢注的坑。跑批量的目的从来不是“注册到最多域名”而是在想注册的时候给自己留出足够多的、真正可用的选择。