这个项目能做什么
Domain Check 是一款权威的域名可用性检查工具,它直接查询注册局 RDAP 服务器。RDAP 是 ICANN 强制要求的 WHOIS 继任者。README 对两者进行了对比:RDAP 使用基于 HTTPS 的结构化 JSON,而 WHOIS 使用 TCP 43 端口的纯文本,缺乏对 .dev 和 .app 的支持,且返回的注册局特定文本难以解析。项目指出,在测试中 whois 将已注册域名报告为可用,而 RDAP 在所有测试用例中均保持准确,并链接了一份关于准确性对比的研究文档。
接口方面,该项目提供三种查询方式。Web UI 提供无需注册的表单。REST API 位于 /api/v1/ 路径下,支持单域名检查、通过逗号分隔 tlds 参数的多 TLD 检查、支持最多 50 个域名且正文限制为 64 KB 的批量 POST 接口,以及健康检查接口。API 响应为 JSON 格式,包含域名、可用性、TLD、检查时间戳、数据源、缓存状态和耗时;对于已注册域名,还包括注册商、创建和过期日期、名称服务器及状态码。CLI 提供 check 和 bulk 子命令,支持多 TLD 检查、JSON 或 CSV 输出、批量运行进度指示、可配置的并发数,并定义了退出代码:全部可用时为 0,至少一个被占用时为 1,出错时为 2。
域名监控(Domain Watch)是一项可选功能,通过 enable-watch 标志启用。它会轮询被监控的域名,并在域名从“已注册”变为“可用”时发送 Webhook。注册监控会返回一个 id、Webhook URL 和 HMAC 密钥;推送内容包含一个带有 sha256 前缀签名的 X-DomainCheck-Signature 请求头,接收方可用密钥进行验证。监控为单次触发,90 天后过期,每 IP 每 24 小时限制 10 个,默认轮询间隔为 15 分钟,并包含 SSRF 防护、私有 IP 拦截和 DNS 重绑定预防。系统仅存储域名和 Webhook URL。
速率限制按 IP 强制执行:Web UI 每分钟 10 次请求,单次检查 API 每分钟 60 次,批量检查每分钟 5 次;超出限制将返回 429 状态码及 Retry-After 请求头。
自托管与配置。Domain Check 是一个无需运行时依赖的单一 Go 二进制文件,或一个 Docker 镜像;从源码构建需要 Go 1.26 或更高版本。模板和静态资源被嵌入在二进制文件中。设置可以通过标志(flags)、DOMCHECK_ 环境变量或 YAML 配置文件指定,优先级顺序为:标志 > 环境变量 > 配置文件 > 默认值。文档涵盖的参数包括监听地址、LRU 缓存大小、可用和已注册结果的独立缓存 TTL、IANA RDAP 引导刷新间隔、X-Forwarded-For 的 trust-proxy 处理、CORS 来源、Prometheus 指标接口、日志格式与级别,以及监控数据库路径、轮询间隔、最大 TTL 和每 IP 监控限制。项目还提供了 Caddy 和 nginx 的反向代理示例。
架构设计。代码组织为命令入口点及内部包,包括检查引擎(RDAP 客户端、WHOIS 回退、DNS 预过滤、IANA 引导加载器、LRU 缓存、SSRF 防护、针对注册局的速率限制)、分层配置、包含 IDN 转 punycode 和 publicsuffix TLD 提取的域名验证、HTTP 服务器与处理器,以及 CLI。README 将请求流程描述为:验证 $
ightarrow$ 缓存查找 $
ightarrow$ DNS 预过滤(快速排除明显已注册的名称)$
ightarrow$ 针对注册局的速率限制 $
ightarrow$ RDAP 查询 $
ightarrow$ 解析 $
ightarrow$ 缓存存储 $
ightarrow$ JSON 响应。默认缓存 TTL 为:可用结果 5 分钟,已注册结果 1 小时,错误结果 30 秒。
安全与维护。README 列出了 SSRF 防护、安全请求头(CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy)、非 root Docker 用户,且零追踪(无分析、无 cookie 或数据保留)。开发过程中使用 go test、模糊测试(fuzz testing)和 golangci-lint,且仓库采用了激进的自动 git 垃圾回收设置。该项目采用 MIT 许可证,被描述为自托管 git 实例的只读 GitHub 镜像,末尾附有镜像测试说明。
评论
0 评分人数达到10人后显示
登录后参与讨论。