做网站、做项目或者做域名投资,第一步往往就是找一个合适的好域名。但好域名大多早就被人注册了,靠肉眼和手动一个个去查,效率低得可怜。这时候未注册域名批量查询工具就派上用场了:把一大串备选域名丢进去,几秒钟就能知道哪些还能注册。这篇文章把批量查询的原理、常用工具、自己写代码实现的方法,以及使用过程中的常见问题一次性讲透。

一、判断域名是否已注册的原理:whois到底是什么
要理解批量查询工具是怎么工作的,得先弄明白一个基础概念——whois。whois本质上是一个分布式的数据库查询协议,每个域名注册信息(注册人、注册时间、到期时间、注册商等)都存储在对应的注册局数据库里。当你查询一个域名的whois记录时,实际上是在向whois服务器发送请求,如果返回了注册信息,说明这个域名已被注册;如果返回" No match "或者类似的空结果,就说明它还处于未注册状态,可以下手。
不同的域名后缀对应不同的whois服务器。比如.com域名的权威whois服务器是whois.verisign-grs.com,.cn域名的是whois.cnnic.cn。大部分在线查询工具背后,都是程序代替你向这些服务器发起查询,然后把结果解析成"已注册"或"未注册"两种状态展示出来。
还有一种更轻量的判断方式:DNS解析法。通过检测域名有没有NS记录来粗略判断它是否被注册。这种方式速度快,但准确度不如whois,因为有些已注册域名并没有配置DNS解析,会被误判为未注册。所以正规的批量查询工具都以whois查询为准。
二、常用的批量查询方式有哪些
第一种是在线批量查询平台。这类网站直接提供一个文本框,你把域名列表(通常支持一次几百到几千个)粘贴进去,选择后缀,点击查询就能得到结果。优点是零门槛,不用安装任何东西;缺点是查询量太大时会有排队和限速,而且部分平台会记录你查询过的域名,存在被抢注的风险,这一点后面细说。
第二种是命令行工具。Linux和Mac系统自带whois命令,配合shell脚本就能实现最简单的批量查询:
#!/bin/bash
# 批量查询域名是否已注册
for domain in $(cat domains.txt); do
result=$(whois $domain 2>/dev/null | grep -i "No match")
if [ -n "$result" ]; then
echo "$domain 未注册,可以抢注"
else
echo "$domain 已被注册"
fi
sleep 2 # 间隔2秒,避免触发限流
done这个脚本读取domains.txt里的域名列表,逐个调用系统的whois命令,通过grep匹配"No match"关键词判断是否未注册。sleep那一步很关键,因为whois服务器普遍有查询频率限制,查得太快会被临时封IP。
第三种是用编程语言自己写工具,灵活度最高。以Python为例,借助第三方库python-whois,几十行代码就能实现一个支持并发的批量查询脚本,下面详细展开。
三、用Python自己写一个批量查询脚本
自己写脚本最大的好处是可以控制并发数、自定义输出格式,还能把查询结果直接存进文件方便后续筛选。先安装依赖:
pip install python-whois
然后是一个带并发控制的完整示例:
import whois
import asyncio
import aiofiles
# 待查询的域名列表
domains = [
"example-a.com",
"example-b.net",
"example-c.cn",
]
async def check_domain(domain, sem, available_list):
async with sem: # 控制并发数量,防止被限流
try:
result = whois.whois(domain)
if result.status is None and not result.domain_name:
available_list.append(domain)
print(f"{domain} 未注册")
else:
print(f"{domain} 已被注册")
except Exception as e:
# 查询异常可能是网络问题,也可能是未注册时抛出的错误
print(f"{domain} 查询异常: {e}")
async def main():
sem = asyncio.Semaphore(5) # 最多同时查5个
available = []
tasks = [check_domain(d, sem, available) for d in domains]
await asyncio.gather(*tasks)
# 把未注册的域名写入文件
async with aiofiles.open("available.txt", "w") as f:
await f.write("\n".join(available))
print(f"共找到 {len(available)} 个未注册域名,已保存到 available.txt")
asyncio.run(main())这段代码用信号量把并发数限制在5个,既保证速度又不容易触发whois服务器的防护机制。查询完的未注册域名会写入available.txt,方便直接拿去注册。需要注意的是,python-whois库对不同后缀的支持程度不一样,一些冷门后缀可能解析失败,遇到这种情况可以换成直接用socket连接对应注册局的43端口发送查询命令。
四、常见问题解答
问题一:为什么查出来是未注册,去注册商那里却注册不了?这种情况通常是时间差造成的。whois数据库存在同步延迟,你查到未注册的瞬间,别人可能刚好注册了;另外有些后缀有注册限制(比如.gov.cn要求资质),whois显示未注册但普通人无法注册。遇到这种情况,先把域名加入观察列表,用注册商提供的监控功能盯着。
问题二:批量查询会触发限流吗?会。whois服务器普遍对单个IP有频率限制,比如每分钟几十次,超过就会暂时拒绝服务。解决办法是控制查询间隔、降低并发数,或者使用付费的API服务(这类服务自带代理池和频率调度,稳定性好得多)。
问题三:在线查询平台会不会偷偷抢注我的域名?确实存在这种风险,业内有过查询平台记录用户查询并抢先注册的争议。如果想查的域名比较敏感,建议优先用本地脚本自己查,直接向注册局whois服务器发请求,不经过第三方,安全性最高。
问题四:怎么选域名后缀?如果建站用,.com和.com.cn仍然是最稳妥的选择,用户信任度高;如果是品牌保护或投资,可以适当关注新顶级后缀,未注册的好词也更多。批量查询时不妨把同一个词根搭配多个后缀一起查,一次比较出性价比最高的组合。
最后提醒一点:查到心仪的未注册域名后尽量尽快完成注册,好域名的竞争非常激烈,犹豫一两天可能就没了。注册后再顺手开启自动续费和域名锁定,避免后续因为过期被别人捡走。