Whois について
Whois は Go 製のセルフホスト可能な WHOIS/RDAP 検索サービスで、ドメイン、IP、CIDR、ASN の情報を必要とする利用者向けです。REST API、キャッシュ、任意の一括検索に加え、AI アシスタントが検索ツールを呼び出せる MCP エンドポイントを備えています。
主な機能
- 01ドメイン、IPv4/IPv6、CIDR、ASN の検索
- 02REST API と型指定された検索パス
- 03メモリーキャッシュと任意の Redis 対応
- 04任意で有効化できる一括検索エンドポイント
- 05ヘルスチェックと Prometheus メトリクス
- 06IDN ドメインの検索
活用シーン
- 01アプリケーションからドメイン登録情報を検索
- 02IP アドレスや CIDR のネットワーク情報を確認
- 03ASN の登録情報を調査
- 04AI アシスタントによる WHOIS 検索
MCP 対応
`/mcp` に Streamable HTTP の MCP エンドポイントがあり、`whois_lookup` を公開します。一括検索を有効にすると `whois_batch_lookup` も利用でき、ドメイン、IP/CIDR、ASN を検索して REST API と同じ形式の結果を返します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://whois.ddnsip.cn/mcpclaude mcp add --transport http whois-kincaidyang https://whois.ddnsip.cn/mcp{"mcpServers":{"whois-kincaidyang":{"type":"http","url":"https://whois.ddnsip.cn/mcp"}}}Cursor で開く{"servers":{"whois-kincaidyang":{"type":"http","url":"https://whois.ddnsip.cn/mcp"}}}VS Code で開く{"mcpServers":{"whois-kincaidyang":{"type":"http","url":"https://whois.ddnsip.cn/mcp"}}}{"mcpServers":{"whois-kincaidyang":{"serverUrl":"https://whois.ddnsip.cn/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
2| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| queries | null|array | はい | 照会するドメイン名、IP アドレス(v4/v6)、または ASN(例:AS12345) |
詳細
紹介
Golang で実装されたドメイン Whois 検索ツールです。公開検索が許可されているすべての TLD サフィックスのドメイン、IPv4/v6、ASN の Whois 情報検索に対応しています。
ICANN の「gTLD 登録データに関する臨時仕様(Temporary Specification for gTLD Registration Data)」および EU の「一般データ保護規則」の遵守要件に基づき、ドメイン情報の検索時には必要な情報の一部のみを返します(詳しくは下記の返却結果の例をご覧ください)。所有者の連絡先、住所、電話番号、メールアドレスなどのフィールドは返しません。
デモサイト:
使い方
Docker のデプロイ
# 安装 Redis
docker run -d --name redis -p 6379:6379 redis:latest
# 运行 whois
docker run -d --name whois -p 8043:8043 --link redis:redis jinzeyang/whois
# 运行 whois(大陆推荐)
docker run -d --name whois -p 8043:8043 --link redis:redis docker.cnb.cool/kincaidyang/whois
ダウンロード
バイナリファイルを使用する
Release ページから、対応するプラットフォーム用のバイナリファイルをダウンロードできます。
ソースからビルドする
git clone https://github.com/KincaidYang/whois.git
cd whois
go build
依存関係のインストール
このプログラムはデフォルトでメモリーキャッシュを使用するため、そのまま実行できます。本番環境や複数インスタンスでのデプロイでは、Redis の併用をおすすめします。インストール方法は https://redis.io/docs/install/install-redis/install-redis-on-linux/ をご覧ください。
設定ファイルの編集
vim config.yaml
⚠️ 設定項目は機能ごとにグループ化されており、キー名は camelCase(API レスポンスのフィールド形式と同じ)です。不明なキーや旧バージョン(v0.9 より前)のフラットなキーがある場合、起動時にエラーが発生し、移行方法が表示されます。デフォルト値への暗黙のフォールバックは行われません。
server:
port: 8043 # 服务监听端口
rateLimit: 60 # 最大并发处理请求数,超出返回 429
upstreamLimit: 60 # 程序向上游 WHOIS/RDAP 服务器发起的最大并发查询数(默认等于 rateLimit,批量与 MCP 查询同样计入)
# metricsAddr: "127.0.0.1:9100" # 设置后 /metrics 改在此地址单独提供(不需要密钥),主端口不再提供;留空(默认)则仍在主端口
log:
level: "info" # 日志级别:debug、info、warn、error(默认:info)
cache:
expiration: 3600 # 缓存过期时间,单位:秒(默认:3600)
negativeExpiration: 60 # “未找到/被拒”结果的缓存时间,单位:秒(默认: 60;设为负数则禁用)
requireRedis: false # false=允许Redis失败时降级到内存缓存,true=Redis必须可用否则程序退出
memoryMaxSize: 10000 # 内存缓存最大条目数,超过此数量按 LRU 淘汰最久未使用条目(默认: 10000)
memoryMaxBytes: 268435456 # 内存缓存最大总字节数(键+值),超过此数量按 LRU 淘汰,即使未超过条目数上限(默认: 268435456,即 256 MiB)
memoryCleanInterval: 300 # 内存缓存过期数据清理间隔,单位:秒(默认: 300)
redis:
addr: "redis:6379" # Redis服务器地址
password: "" # Redis密码,如无密码则留空
db: 0 # Redis数据库编号
tls: false # 通过不可信网络连接 Redis 时建议开启 TLS
tlsSkipVerify: false # 跳过证书校验(不推荐,仅自签名证书场景使用)
proxy:
server: "" # 代理服务器地址,留空表示不使用代理
username: "" # 代理服务器用户名(如需认证)
password: "" # 代理服务器密码(如需认证)
suffixes: [] # 需要使用代理的TLD后缀列表;填 ["all"] 表示全部走代理
bootstrap:
interval: 86400 # RDAP 服务器列表从 IANA 刷新间隔,单位:秒;0 则禁用(推荐:86400)
auth:
keys: [] # API 密钥列表。留空(默认)则服务完全开放;配置一个或多个密钥后,除 /health 和 /ready 外的所有端点都需要认证,请求时通过 "Authorization: Bearer <key>" 或 "X-API-Key: <key>" 携带密钥
# 列表项支持纯字符串,也支持对象形式(可命名、可按 key 限流):
# keys:
# - "plain-secret" # 匿名 key,自动命名 key1/key2/…
# - key: "another-secret"
# name: "ci" # 显示名:出现在日志 client 字段和 Prometheus 指标中
# rateLimit: 120 # 该 key 的速率限制(次/分钟);0 或缺省=不限
batch:
enabled: false # POST /batch 批量查询端点(含 MCP 批量 tool),默认关闭;建议与 auth.keys 一起开启
maxItems: 10 # 单批最多查询条数
mcp:
localhostProtection: false # /mcp 端点的 DNS rebinding 保护:开启后只接受 Host 为 localhost 的请求。反向代理部署保持 false;本机直连部署建议设为 true
环境变量
所有配置项均可通过环境变量覆盖(优先级高于配置文件),适合 Docker/Kubernetes 等不便挂载配置文件的部署方式:
| 环境变量 | 对应配置项 | 默认值 | 说明 |
|---|---|---|---|
WHOIS_PORT | server.port | 8043 | 服务监听端口 |
WHOIS_RATE_LIMIT | server.rateLimit | 100 | 最大并发请求数 |
WHOIS_UPSTREAM_LIMIT | server.upstreamLimit | 同 rateLimit | 最大并发上游查询数 |
WHOIS_METRICS_ADDR | server.metricsAddr | 空 | /metrics 的独立监听地址(如 127.0.0.1:9100) |
WHOIS_LOG_LEVEL | log.level | info | 日志级别:debug、info、warn、error |
WHOIS_CACHE_EXPIRATION | cache.expiration | 3600 | 缓存过期时间(秒) |
WHOIS_NEGATIVE_CACHE_EXPIRATION | cache.negativeExpiration | 60 | 负向缓存时间(秒),负数禁用 |
WHOIS_REQUIRE_REDIS | cache.requireRedis | false | true/1 时 Redis 不可用则启动失败 |
WHOIS_MEMORY_MAX_SIZE | cache.memoryMaxSize | 10000 | 内存缓存最大条目数 |
WHOIS_MEMORY_MAX_BYTES | cache.memoryMaxBytes | 268435456 | 内存缓存最大总字节数 |
WHOIS_MEMORY_CLEAN_INTERVAL | cache.memoryCleanInterval | 300 | 内存缓存清理间隔(秒) |
WHOIS_REDIS_ADDR | redis.addr | 未设置 | Redis 地址;显式设为空(WHOIS_REDIS_ADDR=)则禁用 Redis 仅用内存缓存,配置后不可用时自动降级到内存缓存(除非开启 requireRedis) |
WHOIS_REDIS_PASSWORD | redis.password | 空 | Redis 密码 |
WHOIS_REDIS_DB | redis.db | 0 | Redis 数据库编号 |
WHOIS_REDIS_TLS | redis.tls | false | true/1 启用 Redis TLS |
WHOIS_REDIS_TLS_SKIP_VERIFY | redis.tlsSkipVerify | false | true/1 跳过证书校验(不推荐) |
WHOIS_PROXY_SERVER | proxy.server | 空 | 代理服务器地址,空则不使用代理 |
WHOIS_PROXY_USERNAME | proxy.username | 空 | 代理用户名 |
WHOIS_PROXY_PASSWORD | proxy.password | 空 | 代理密码 |
WHOIS_PROXY_SUFFIXES | proxy.suffixes | 空 | 走代理的 TLD 列表,逗号分隔(all 表示全部) |
WHOIS_BOOTSTRAP_INTERVAL | bootstrap.interval | 0(禁用) | IANA RDAP 列表刷新间隔(秒);配置文件示例为 86400 |
WHOIS_AUTH_KEYS | auth.keys | 空 | API 密钥,逗号分隔(仅纯 key 形式;命名/按 key 限流需配置文件) |
WHOIS_BATCH_ENABLED | batch.enabled | false | true/1 开启批量查询端点 |
WHOIS_BATCH_MAX_ITEMS | batch.maxItems | 10 | 单批最多查询条数 |
WHOIS_MCP_LOCALHOST_PROTECTION | mcp.localhostProtection | false | true/1 启用 /mcp 的 DNS rebinding 保护 |
布尔型变量只认 true 和 1,其余值视为 false。数值型变量解析失败时静默忽略并沿用配置文件/默认值。
纯环境变量部署示例(不挂载配置文件):
docker run -d --name whois -p 8043:8043 \
-e WHOIS_REDIS_ADDR=redis:6379 \
-e WHOIS_BOOTSTRAP_INTERVAL=86400 \
-e WHOIS_AUTH_KEYS=secret1,secret2 \
--link redis:redis jinzeyang/whois
配置说明:
- Redis配置:建议使用Redis以获得更好的性能和多实例缓存共享能力
- 缓存过期时间:根据查询频率调整,建议3600秒
- 内存缓存:Redis 不可用时的兜底,达到上限后按 LRU(最近最少使用)淘汰
- 负向缓存:将“未找到/被拒”的查询结果短时间缓存,避免对不存在的资源反复请求上游;默认 60 秒
- 并发限制:控制向上游服务器的请求频率,避免被限流。
- 代理配置:某些TLD可能需要代理访问,可配置特定后缀使用代理
- 日志级别:
debug会输出每次缓存命中和上游查询,流量大时噪声较高;生产环境建议保持info - RDAP 刷新间隔:服务启动时会立即从 IANA 拉取最新 RDAP 服务器列表,之后按此间隔定期刷新;编译进二进制的数据作为拉取失败时的兜底
- API 认证:默认关闭。配置
auth.keys后即启用,未携带有效密钥的请求返回 401(RFC 9457 problem+json);仅/health和/ready豁免,便于存活/就绪探针工作。/metrics里有whois_client_requests_total{client},任何一个密钥都能看到所有调用方的名称和请求量;把密钥分发给多个下游时,建议设置server.metricsAddr,让/metrics只在内网地址上提供 - key 命名与按 key 限流:
auth.keys的对象形式可为每个 key 设置显示名和速率限制。显示名出现在请求日志的client字段和 Prometheus 指标whois_client_requests_total{client,status_code}中,便于区分调用方;速率限制为 token bucket(次/分钟,允许一次性用完整分钟额度),超限返回 429 +Retry-After头。批量查询按条数计入额度:一批 N 条消耗 N 个请求额度;/mcp收到的 JSON-RPC 批量请求同样按其中的工具调用数计入 - 批量查询:默认关闭。建议与
auth.keys一起开启——开放实例提供批量查询等于放大被滥用打上游注册局的能力
⚠️ Warning: 限频针对的是程序向 whois 服务器发起的请求,而非用户向本程序发起的请求。例如,您将
server.upstreamLimit设置为 50,那么程序同时向注册局 whois/RDAP 服务器发起的查询将不会超过 50 个,但是用户向本程序发起的请求不受限制。请您通过 Nginx 等工具对本程序进行限流,或为每个 API key 配置rateLimit,以防止恶意请求。
运行
./whois
注意: 本程序默认监听 8043 端口。
健康检查端点
服务提供以下健康检查端点:
| 端点 | 描述 |
|---|---|
GET /health | 存活检查 - 服务运行即返回 200 |
GET /ready | 就绪检查 - 检查缓存和并发容量状态 |
GET /info | 运行时信息 - 版本、运行时间、Go 版本等 |
GET /metrics | Prometheus 指标 - 请求计数、延迟、缓存命中率、上游查询耗时(指标清单与告警建议见 docs/metrics.md);设置 server.metricsAddr 后改在该地址提供 |
GET /openapi.json | OpenAPI 3.1 规范 - 全部端点与响应 schema 的机器可读描述 |
POST /mcp | MCP Streamable HTTP 端点 - 供 AI 助手集成使用 |
POST /batch | 批量查询 - 一次提交多个域名/IP/ASN(默认关闭,见 batch.enabled) |
示例:
curl http://localhost:8043/health
{
"status": "ok",
"timestamp": "2026-02-05T01:32:05Z",
"uptime": "10s",
"checks": {
"cache": {"status": "ok", "message": "redis"}
}
}
プロセスのデーモン化(任意)
systemd などのツールを使って、このプログラムをデーモンとして設定すると、システムの再起動後に自動で実行できます。
vim /etc/systemd/system/whois.service
[Unit]
Description=whois
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
ExecStart=/path/to/whois/whois
WorkingDirectory=/path/to/whois
Restart=on-failure
[Install]
WantedBy=multi-user.target
使い方
GET リクエスト
ブラウザーからアクセス
デプロイ後、ブラウザーでhttp://ip:ポート/調べたいドメイン名またはipまたはasnに直接アクセスします。デフォルトのポートは8043です。例:http://1.2.3.4:8043/examlpe.com。詳しい例は以下を参照してください。
国際化ドメイン名(IDN、中国語やダイアクリティカルマーク付きなどの Unicode ドメイン)を直接検索できます。プログラムが自動的に Punycode に変換してから検索します。例:
http://1.2.3.4:8043/例子.cn。
型指定クエリーパス
ルートパスでの自動判定に加え、RFC 9082 形式の型指定パスも利用できます。プログラムからの呼び出しに適しており、リソースの型が一致しない場合は、別の型として判定されることなく直接 400 を返します。
curl http://localhost:8043/domain/example.com
curl http://localhost:8043/ip/192.0.2.1
curl http://localhost:8043/autnum/205794 # 也接受 as205794 / AS205794
IP クエリーでは CIDR プレフィックスをサポートしています(ルートパスと /ip/ のどちらでも利用できます)。
curl http://localhost:8043/ip/192.0.2.0/24
curl http://localhost:8043/2001:db8::/32
OpenAPI 仕様
サービスは /openapi.json で OpenAPI 3.1 の記述ドキュメントを提供します。すべてのエンドポイント、レスポンススキーマ(RDAP 用語)、エラー形式が含まれており、Postman/Swagger UI などのツールに直接インポートできます。
キャッシュとクロスオリジン
- 成功レスポンスには、キャッシュ状態を示す
X-Cacheヘッダーが付きます。HIT(サーバー側キャッシュにヒット)、MISS(レジストリーに問い合わせ)、REFRESH(?refreshによる強制問い合わせ)を示します。また、クライアント/CDN キャッシュ用にCache-Control: public, max-age=<キャッシュ秒数>が付きます。 - 成功レスポンス(200)には強い
ETagヘッダーが付きます。リクエストにIf-None-Match: <etag>を含めると条件付き再検証ができ、内容に変更がない場合は304 Not Modified(レスポンスボディなし)が返されます。/openapi.jsonも同様に対応しています。 - すべてのレスポンスに
Access-Control-Allow-Origin: *が付き、ブラウザーのフロントエンドから直接クロスオリジンで呼び出せます。
ドメインの Whois 情報を検索
curl http://localhost:8043/example.com
返却結果
{
"objectClassName": "domain",
"ldhName": "example.com",
"registrar": "RESERVED-Internet Assigned Numbers Authority",
"registrarIanaId": "376",
"status": [
"client delete prohibited",
"client transfer prohibited",
"client update prohibited"
],
"registrationDate": "1995-08-14T04:00:00Z",
"expirationDate": "2026-08-13T04:00:00Z",
"lastChangedDate": "2025-08-14T07:01:34Z",
"nameservers": [
"a.iana-servers.net",
"b.iana-servers.net"
],
"secureDNS": {
"delegationSigned": true,
"dsData": [
{
"keyTag": 370,
"algorithm": 13,
"digestType": 2,
"digest": "BE74359954660069D5C63D200C39F5603827D7DD02B56F120EE9F3A86764247C"
}
]
},
"lastUpdateOfRdapDb": "2026-01-16T10:26:40Z"
}
フィールド名と用語は RDAP(RFC 9083) の仕様に準拠しています。objectClassName はオブジェクトの種類(domain/ip network/autnum)を示し、日付はすべて RFC 3339 UTC 形式です。IDN ドメインを検索すると、unicodeName フィールドも追加で返されます。解析できない ccTLD の場合は、{"objectClassName": "domain", "unparsed": true, "rawText": "..."} が返されます。
ドメインの WHOIS 生テキストを検索
?raw=1 パラメーターを追加すると、解析前の WHOIS 生テキスト(text/plain)を取得できます。ドメイン検索のみ対応しています(IP/ASN は RDAP を使用するため、生テキスト形式はありません)。生テキストの検索では WHOIS サーバーに直接アクセスします(RDAP を経由しません)。その TLD に既知の WHOIS サーバーがない場合は 404 が返されます。
curl "http://localhost:8043/example.com?raw=1"
キャッシュを強制更新
?refresh=1 パラメーターを追加すると、サーバー側キャッシュをスキップしてレジストリーに強制問い合わせし、新しい結果でキャッシュを上書きします(レスポンスには X-Cache: REFRESH が付きます)。ドメインの移管/更新後に新しい状態をすぐに確認する場合に便利です。API 認証が有効なインスタンスでのみ利用できます。auth.keys が設定されていないインスタンスでは 403(refresh-requires-auth)が返されます。そうでなければ、誰でもキャッシュを無効化して上流のレジストリーに大量の問い合わせを行えてしまうためです。?raw と組み合わせて使用できます。
curl -H "X-API-Key: your-secret-key" "http://localhost:8043/example.com?refresh=1"
一括検索
POST /batch で複数の検索を一度に送信できます(ドメイン/IP/CIDR/ASN を混在させることができ、種類は自動判定されます)。各項目の結果が返されます。デフォルトでは無効です。batch.enabled: true を設定して有効にしてください。1 回のバッチで送信できる件数の上限は batch.maxItems です(デフォルトは 10)。
curl -X POST -H "X-API-Key: your-secret-key" -H "Content-Type: application/json" \
-d '{"queries": ["example.com", "8.8.8.8", "AS15169"]}' \
http://localhost:8043/batch
レスポンスは常に 200 で、各項目のステータスが示されます。成功項目の data は通常のレスポンスオブジェクト、失敗項目の error は problem+json オブジェクトです。
{
"results": [
{"query": "example.com", "status": 200, "data": {"objectClassName": "domain", "ldhName": "example.com"}},
{"query": "nx.invalid", "status": 404, "error": {"type": "...#not-found", "title": "Resource not found", "status": 404}}
]
}
キーごとのレート制限が設定されている場合、N 件のバッチで N 件分のリクエスト枠を消費するため、一括検索を使ってレート制限を回避することはできません。バッチ内の重複した検索は、上流へのリクエスト 1 回にまとめられます。
リクエストのトレース
各レスポンスには X-Request-ID ヘッダーが付きます。サーバーログの request_id フィールドと対応しており、問題の調査に役立ちます。クライアントから X-Request-ID リクエストヘッダーを指定することもできます(64 文字以下で、英字、数字、.、_、- のみ使用可能)。指定した値はそのまま使用されます。
IPv4 の Whois 情報を検索
curl http://localhost:8043/1.12.34.56
返却結果
{
"objectClassName": "ip network",
"handle": "1.12.0.0 - 1.15.255.255",
"startAddress": "1.12.0.0",
"endAddress": "1.15.255.255",
"cidr": "1.12.0.0/14",
"cidrs": [
"1.12.0.0/14"
],
"name": "TencentCloud",
"type": "ALLOCATED PORTABLE",
"country": "CN",
"status": [
"active"
],
"registrationDate": "2010-05-10T22:46:58Z",
"lastChangedDate": "2023-11-28T00:51:33Z",
"remarks": [
{
"title": "description",
"description": [
"Tencent cloud computing (Beijing) Co., Ltd.",
"Floor 6, Yinke Building,38 Haidian St,",
"Haidian District Beijing"
]
}
]
}
IPv6 の Whois 情報を検索
curl http://localhost:8043/2402:4e00::
返却結果
{
"objectClassName": "ip network",
"handle": "2402:4e00::/32",
"startAddress": "2402:4e00::",
"endAddress": "2402:4e00:ffff:ffff:ffff:ffff:ffff:ffff",
"cidr": "2402:4e00::/32",
"cidrs": [
"2402:4e00::/32"
],
"name": "TencentCloud",
"type": "ALLOCATED PORTABLE",
"country": "CN",
"status": [
"active"
],
"registrationDate": "2010-05-12T23:13:32Z",
"lastChangedDate": "2024-01-31T06:27:10Z",
"remarks": [
{
"title": "description",
"description": [
"Tencent cloud computing (Beijing) Co., Ltd.",
"Floor 6, Yinke Building,38 Haidian St,Haidian District Beijing"
]
}
]
}
ASN の Whois 情報を検索
curl http://localhost:8043/ASN205794
curl http://localhost:8043/AS205794
curl http://localhost:8043/205794
⚠ 大文字と小文字は区別されません
返却結果
{
"objectClassName": "autnum",
"handle": "AS205794",
"name": "RTTW-AS",
"status": [
"active"
],
"registrationDate": "2022-04-14T12:24:55Z",
"lastChangedDate": "2024-03-21T07:27:44Z",
"remarks": [
{
"title": "",
"description": [
"https://as205794.net/",
"Geofeed https://geo.as205794.net/geofeed.csv",
"Looking Glass https://lg.as205794.net/"
]
}
]
}
エラーレスポンス
エラーレスポンスは RFC 9457 Problem Details の仕様に準拠しており、Content-Type は application/problem+json です。
{
"type": "https://github.com/KincaidYang/whois/blob/main/docs/errors.md#not-found",
"title": "Resource not found",
"status": 404
}
すべてのエラータイプについては docs/errors.md を参照してください。
MCP 連携
サービスは /mcp で MCP(Model Context Protocol) エンドポイントを提供し、Streamable HTTP トランスポートを使用します。AI アシスタント(Claude など)から WHOIS 検索をツールとして直接呼び出せます。
ツール名: whois_lookup
入力:
{ "query": "example.com" }
ドメイン、IPv4/v6 アドレスまたは CIDR プレフィックス、ASN(例:AS12345)に対応しており、REST API と完全に同じ結果を返します。
ツール名: whois_batch_lookup(batch.enabled を有効にする必要があります)
入力:
{ "queries": ["example.com", "8.8.8.8", "AS15169"] }
各項目の結果を返します。動作は POST /batch と同じです(batch.maxItems とキーごとのレート制限も適用されます)。
MCP サーバーのアドレス: http://ip:ポート/mcp
クライアントの接続設定と認証方法については docs/mcp.md を参照してください。
バージョンと安定性
v1.0.0 以降、本プロジェクトはセマンティックバージョニングに従います。以下のユーザー向けの契約は 1.x の間、安定して維持されます。互換性のない変更は、次のメジャーバージョン(2.0.0)でのみ行われます。
- HTTP API:エンドポイントのパスとセマンティクス、成功レスポンスの JSON フィールド(RDAP 用語、RFC 9083)、エラー形式(RFC 9457 problem+json)、およびキャッシュと条件付きリクエストに関するレスポンスヘッダー(
X-Cache、Cache-Control、ETag)。 - 設定ファイル:
config.yamlのグループ構造とキー名、およびWHOIS_*環境変数。 - MCP ツール:
whois_lookup/whois_batch_lookupの名前と入力パラメーター。
安定性の保証対象外:レジストリーから取得するデータの内容と利用可能なフィールド(レジストリーによって異なります)、Prometheus メトリクス名、ログ形式、Go パッケージの内部構造(本モジュールはインポート可能な API を外部に公開しません)。
0.x 期間の破壊的変更はすでに終了しています。完全な履歴は CHANGELOG を参照してください。
既知の問題
プログラムは、主に RDAP プロトコルを使ってレジストリーに Whois 情報を問い合わせます。しかし、大半の ccTLD は RDAP プロトコルに対応していないため、プログラムはその生の Whois 情報を整形して JSON データとして返します。対応に割ける時間には限りがあり、すべての ccTLD サフィックスに対応できていません。未対応のサフィックスでは {"objectClassName": "domain", "unparsed": true, "rawText": "..."} が返されます。よく使うサフィックスが未対応の場合は、Issue を提出するか、internal/whois/whois_parsers.go ファイルにマッチングルールを追加して貢献していただけると幸いです。
项目依赖
本项目使用了以下Go标准库:
bytes:操作字节切片的函数。context:定义了Context类型,用于在API边界和进程之间传递截止日期、取消信号和其他请求范围的值。encoding/json:编码和解码JSON对象的函数。errors:创建错误和操作错误的函数。fmt:格式化I/O函数。io:I/O原语函数。log/slog:结构化日志服务。net:网络I/O原语的函数。net/http:HTTP客户端和服务器实现。os:操作系统功能的函数。os/signal:接收操作系统信号的函数。regexp:正则表达式搜索。strconv:将字符串转换为基本类型的函数。strings:操作字符串的函数。sync:基本的同步原语。syscall:访问操作系统底层调用的函数。time:测量和显示时间的函数。
本项目还使用了以下第三方库:
github.com/redis/go-redis/v9:Go语言Redis客户端。github.com/prometheus/client_golang:Prometheus 指标采集与暴露。github.com/modelcontextprotocol/go-sdk:MCP(Model Context Protocol)Go SDK。golang.org/x/net/idna:实现了IDNA(国际化域名在应用程序)规范。golang.org/x/net/publicsuffix:实现了公共后缀列表规范。gopkg.in/yaml.v3:YAML 解析库。
WHOIS/RDAP 服务器列表来自于:
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。