想给自己网站加个域名Whois查询,说白了就是让用户输入一个域名,点一下,页面显示这个域名的注册商、注册时间、到期时间、DNS服务器这些信息。功能不复杂,但真要做稳,得考虑几个实际问题:用谁的数据源、怎么解析、怎么防滥用、怎么合规。
先看数据源。传统Whois走的是43端口,纯文本协议。比如查.com,连到whois.verisign-grs.com,发过去“example.com\r\n”,服务器返回一大段文本。查.cn就连whois.cnnic.cn,查.org连whois.pir.org。不同后缀的服务器不一样,得维护一张表,或者先问whois.iana.org,让它告诉你该找谁。自己写socket代码大概十几行:
import socket
def whois_query(domain, server):
s = socket.socket()
s.settimeout(5)
s.connect((server, 43))
s.send((domain + "\r\n").encode())
data = b""
while True:
chunk = s.recv(4096)
if not chunk:
break
data += chunk
s.close()
return data.decode(errors="ignore")
这段能跑,但返回的是原始文本,格式五花八门。有的用“Registrar:”,有的用“注册商:”,日期格式也不统一。想直接展示给用户,还得写解析规则,挺烦。
现在更推荐用RDAP。RDAP是Whois的升级版,返回JSON,结构化好解析。比如查.com,直接请求 https://rdap.verisign.com/com/v1/domain/example.com,拿到的就是JSON,里面有events、entities、nameservers。不同后缀的RDAP地址可以从IANA的bootstrap文件里找:https://data.iana.org/rdap/dns.json。这个文件列出了所有后缀对应的RDAP服务器。用RDAP,后端代码能少一半,前端展示也整齐。

如果不想自己维护这些,就用第三方API。国外有whoisxmlapi、ipwhois,国内阿里云、腾讯云也有域名查询接口。它们把Whois和RDAP都封装好了,返回统一JSON,还带缓存和限速。缺点是免费额度有限,量大了要付费,而且数据要经过别人服务器。自己用的话,选个免费额度够的就行。
后端选型看你的网站技术栈。PHP可以用phpwhois,Python用python-whois,Node用whois库。以Python Flask为例,一个接口就能搞定:
from flask import Flask, request, jsonify
import whois
app = Flask(__name__)
@app.route(''/api/whois'')
def query():
domain = request.args.get(''domain'', '''').strip().lower()
if not domain or len(domain) > 253:
return jsonify({''error'': ''invalid domain''}), 400
try:
w = whois.whois(domain)
return jsonify({
''domain'': w.domain_name,
''registrar'': w.registrar,
''creation_date'': str(w.creation_date),
''expiration_date'': str(w.expiration_date),
''name_servers'': w.name_servers,
''status'': w.status
})
except Exception as e:
return jsonify({''error'': str(e)}), 500
前端更简单,一个输入框加按钮,fetch请求这个接口,把JSON渲染成表格就行。注意做防抖,别用户一边打字一边发请求。
但有几个坑得提前说。Whois服务器普遍限速,同一IP一分钟查太多次会被封。所以后端一定要加缓存,比如用Redis存结果,设24小时过期。域名注册信息一天内基本不变,缓存完全够用。还要限制单个IP的查询频率,防止被人当免费API刷。另外,用户输入的域名要严格校验,只允许字母、数字、连字符和点,别让输入里带换行或者命令,否则可能被用来注入。
合规问题也不能忽略。GDPR之后,欧洲域名的注册人姓名、邮箱、电话大多被隐藏,显示“REDACTED FOR PRIVACY”。中国.cn域名虽然要求实名,但公开查询里个人信息也有限。你展示的时候别把隐私字段直接放出来,最好只显示注册商、日期、DNS这些公开信息。如果网站面向欧盟用户,还得注意别存储查询到的个人数据。
最后,如果你只是想在网站上放个查询小工具,不想折腾后端,也有纯前端方案。有些API支持CORS,可以直接在浏览器里请求。但这样会暴露你的API key,量大了容易被盗用。稳妥点还是走后端代理。
总结一下,给网站加域名Whois查询,最简单的路径是:后端用RDAP或第三方API,加缓存和频率限制,前端一个表单展示关键字段。自己从零写Whois socket也不是不行,但解析和维护成本高,除非你只查一两个固定后缀。实际做下来,一个下午就能上线,真正花时间的是防滥用和合规处理。