109 lines
2.4 KiB
Markdown
109 lines
2.4 KiB
Markdown
# 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` 文件。
|