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` 文件。
|