# sdk/whois `b612.me/sdk/whois` 是一个面向 Go 的域名信息查询 SDK,提供传统 WHOIS 与 RDAP 的统一查询入口。 ## 功能概览 - 统一查询入口:`Lookup` / `LookupContext` - 查询模式:`whois-only`、`rdap-only`、`auto-rdap`、`both-rdap`、`both-whois` - 域名与 IP/ASN RDAP 查询 - RDAP Bootstrap(内置 + 本地覆盖 + 远程刷新) - 结构化解析结果 + 原始返回数据 - 统一代理配置(RDAP + WHOIS)与协议级覆盖 - 上下文超时、重试、错误分类与质量元信息 ## 安装 ```bash go get b612.me/sdk/whois ``` ## 快速开始 ```go package main import ( "fmt" "b612.me/sdk/whois" ) func main() { c := whois.NewClient() res, meta, err := c.Lookup("example.com", whois.WithLookupMode(whois.LookupModeAutoPreferRDAP), ) if err != nil { panic(err) } fmt.Println("source:", meta.Source) fmt.Println("exists:", res.Exists()) fmt.Println("domain:", res.Domain()) fmt.Println("registrar:", res.Registrar()) } ``` ## 查询模式说明 - `LookupModeWHOISOnly`:仅 WHOIS - `LookupModeRDAPOnly`:仅 RDAP - `LookupModeAutoPreferRDAP`:先 RDAP,失败时回退 WHOIS - `LookupModeBothPreferRDAP`:都查,合并结果,优先 RDAP 字段 - `LookupModeBothPreferWHOIS`:都查,合并结果,优先 WHOIS 字段 ## 统一代理配置 从当前版本开始,支持统一代理配置: - `WithLookupProxy(...)`:设置 RDAP + WHOIS 共享代理 - `WithLookupRDAPProxy(...)`:仅覆盖 RDAP 代理 - `WithLookupWHOISProxy(...)`:仅覆盖 WHOIS 代理 - `WithLookupWHOISDialer(...)`:直接注入 WHOIS TCP Dialer(优先级最高) 优先级规则: - RDAP:`RDAP.Proxy > Common.Proxy` - WHOIS:`WHOIS.Dialer > WHOIS.Proxy > Common.Proxy` 注意: - WHOIS 是 TCP 协议,推荐/默认使用 `socks5://` 代理 - 仅写 `host:port` 时会自动按 `socks5://host:port` 处理 - WHOIS 不支持 `http://` 代理;若传入会快速返回错误 示例: ```go res, meta, err := c.Lookup("example.com", whois.WithLookupMode(whois.LookupModeAutoPreferRDAP), whois.WithLookupProxy("socks5://127.0.0.1:1080"), ) _ = res _ = meta _ = err ``` ## RDAP Bootstrap 更新 可使用 SDK 提供的方法刷新 RDAP Bootstrap 数据(示例): ```go _, err := whois.UpdateDefaultRDAPBootstrapFileFromURL(ctx, "rdap_dns.json") if err != nil { // handle error } ``` ## 测试 ```bash go test ./... ``` ## License 本项目使用 Apache License 2.0,详见 `LICENSE` 文件。