🔍

一部のドメインにおいてWHOISはもうオワコン?ICANN公式のRDAPコマンドラインツールを導入してみた話

に公開

https://blog.tpdn.kim/entry/goodbye-whois-hello-rdap/


Googleが管理するgTLDで突如WHOISのサポートを打ち切り、RDAP(Registration Data Access Protocol)に一本化しやがりました。
ここではWHOISに代わって登場するRDAPや、ICANN公式のコマンドラインツールの使い方についてまとめています。
日本語圏に情報が全くなさそうなので書いてみた…という感じです。

KEY POINTS

  • ICANNはWHOISの廃止とRDAPの正式採用を表明(今すぐWHOIS廃止という意味ではない)
  • まだWHOISは機能しているはずだが、2025年5月頃からGoogle管理下のgTLDではWHOIS非対応、RDAPオンリーに
  • whoisコマンドくらいの使い勝手で手軽に使いたいなら、ICANN提供のCLIツールが便利

時代はRDAP

今年からWHOISが廃止に向かい、後継としてRDAPが使われる方向性であることをICANNが発表しました。

とはいえいきなりRDAPに全部切り替わるわけではなく、WHOISもまだまだ使える状態です。
今後はRDAPを使いますというのは、WHOISを今すぐシャットダウンしましょうという意味ではないはずです。

実際RDAPに対応していないドメインはまだまだあります。WHOISをいきなり切り捨てるのは…普通に考えてナシでしょう。

Googleさんの大胆な対応

ところが今年の5月ごろ(XとかThreadsとかに流れる情報からすると4月?)から、Googleが管理するgTLDではWHOISが機能しなくなり、空レスポンスを返す仕様に変わりました。
つまりWHOISをいきなりシャットダウンして切り捨てやがったのです。

事前に告知でもされていた可能性を考えましたが、見る感じなさそうです。なので本当にいきなりなのでしょう。
https://www.registry.google/announcements/

Googleが管理するgTLDには.dev や.app などのポピュラーなものが含まれています。
WHOISを参照した自動化ツールを使っている場合影響は甚大です。

実を言うと私がこれに気づいたのは、自作のドメイン有効期限切れ警告ツールが突如正常に動作しなくなったからです。
whoisコマンドの結果をシェルスクリプトでパースするだけの素朴なツールなのですが、devドメインに関連するものがぶっ壊れてしまいました。

そんなわけでRDAPを導入することになったのです。

日本語圏で検索するとよく出てくる、RDAPの基本的な使い方

RDAPはHTTPベースのAPIです。curlなどで以下のように使えます。

# curl -L https://rdap.verisign.com/com/v1/domain/google.com | jq .ldhName
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2429  100  2429    0     0   6800      0 --:--:-- --:--:-- --:--:--  6784
"GOOGLE.COM"

ただドメインごとに異なるRDAPエンドポイントを手作業で調べるのは面倒です。

whoisコマンドではwhois example.com のように入れるだけで、人間が読めるデータを取得してくれますよね。
whois並みに簡単なコマンドで取得できないと辛すぎるので専用ツールを導入します。

ICANN特製のコマンドラインツール

ICANNはRust製のRDAPコマンドラインツールを公開しています。

他にも同様のコマンドラインツールはありそうですが、以下の理由からこれを導入しました。

  • ICANNが作っている
    • インターネットといえばここしかないでしょ
    • ケツモチが強いと継続性を期待できる
  • Rustで作られている
    • 保守性が高そう
  • 出力が非常にフレンドリーで使い方もお手軽
    • 人間にもマシンにもやさしい

インストール

詳細は公式Wikiを参照してください
https://github.com/icann/icann-rdap/wiki

インストールは以下のどれかをやればよいです。

このツールは比較的新しいツールです。
2025年6月現在、各種Linuxディストロのパッケージ管理システムではまだあまり見かけません。
https://repology.org/project/icann-rdap/versions

debianではITPされているようなので、そのうち一撃インストールできるパッケージになってるかもしれないです。

  • もし利用可能なパッケージがあるならそれを使う
    • たとえばMacなら brew install icann-rdap  でhomebrewからインストールする
  • バイナリをGitHubからダウンロード後、適当な場所に配置してパスを通す
  • cargo install icann-rdap-cli

使い方

詳しくはrdap --help やGitHubのWikiを見てください。
https://github.com/icann/icann-rdap/wiki/RDAP-command

基本

基本はこれだけです。ドメイン入れるだけで動くってのは、ほぼwhoisコマンドと同様です。設定項目はかなりありますが未入力でも普通に動作します。

rdap tpdn.kim

見ての通り、かなり親切な出力です。

(前略)
                      Domain tpdn.kim

┌────────────────────────────┬──────────────────────────────┐
│                     Summary│Domain tpdn.kim               │
│                            │• INTERNAL-9069 (Registrant)  │
│                            │• INTERNAL-9070               │
│                            │  (Administrative)            │
│                            │• INTERNAL-9071 (Technical)   │
│                            │• INTERNAL-9072 (Billing)     │
│                            │• 1861 (Registrar)            │
│                            │  • 1 (Abuse)                 │
│                            │• Nameserver                  │
│                            │  cleo.ns.cloudflare.com      │
│                            │• Nameserver                  │
│                            │  janet.ns.cloudflare.com     │
├────────────────────────────┼──────────────────────────────┤
│        Identifiers         │                              │
├────────────────────────────┼──────────────────────────────┤
│                    LDH Name│tpdn.kim                      │
│                Unicode Name│                              │
│                      Handle│a2de3ca25dc8437baef2a953acba73│
│                            │86-DONUTS                     │
│           IANA Registrar ID│1861                          │
├────────────────────────────┼──────────────────────────────┤
│        Information         │                              │
├────────────────────────────┼──────────────────────────────┤
│                      Status│• Delete Prohibited           │
│                            │• Transfer Prohibited         │
│                       Whois│                              │
├────────────────────────────┼──────────────────────────────┤
│           Events           │                              │
├────────────────────────────┼──────────────────────────────┤
│Last Update Of RDAP Database│• Tue, 11-Mar-2025 11:15:08   │
│                            │  +00:00                      │
│                Registration│• Mon,  1-Sep-2014 00:25:40   │
│                            │  +00:00                      │
│                  Expiration│• Fri,  1-Sep-2034 00:25:40   │
│                            │  +00:00                      │
│                Last Changed│• Tue, 11-Mar-2025 11:15:08   │
│                            │  +00:00                      │
├────────────────────────────┼──────────────────────────────┤
│           Links            │                              │
├────────────────────────────┼──────────────────────────────┤
│                        Self│• https://cart-before.porkbun.│
│                            │  horse/rdap/domain/tpdn.kim  │
│                            │• application/rdap+json       │
│                            │• https://cart-before.porkbun.│
│                            │  horse/rdap/domain/tpdn.kim  │
└────────────────────────────┴──────────────────────────────┘

                 ┌──────────────────┬─────┐
                 │DNSSEC Information│     │
                 ├──────────────────┼─────┤
                 │       Zone Signed│     │
                 │ Delegation Signed│false│
                 │      Max Sig Life│     │
                 └──────────────────┴─────┘
(以下略)

標準状態では出力フォーマットは自動選択となっています。
自動選択はパイプ処理時にはjson、単独実行時にはrendered-markdown形式で出力する親切設計になっていました。

応用

RDAPは指定のフォーマットで書かれたjsonで、jqを噛ませると色々便利に扱うことができます。

# rdap -O pretty-json -p registry tpdn.kim | jq '.events[]'
2025-06-09T22:16:43.472390Z  INFO rdap: ICANN RDAP 0.0.22 Command Line Interface
2025-06-09T22:16:43.472444Z  INFO rdap: query type is Domain Lookup for value 'tpdn.kim'
{
  "eventAction": "transfer",
  "eventDate": "2025-03-11T11:11:49.391Z"
}
{
  "eventAction": "expiration",
  "eventDate": "2034-09-01T00:25:40.394Z"
}
{
  "eventAction": "registration",
  "eventDate": "2014-09-01T00:25:40.394Z"
}
{
  "eventAction": "last changed",
  "eventDate": "2025-03-16T11:12:04.982Z"
}
{
  "eventAction": "last update of RDAP database",
  "eventDate": "2025-06-09T22:12:34.083Z"
}

例えばこんなふうにしちゃえばドメインの有効期限の日付がとれます。

# rdap -O pretty-json -L off -p registry tpdn.kim | jq '.events[] | select(.eventAction == "expiration")["eventDate"]' | tr -d \" | xargs -I{} date --iso-8601 -d {}
2034-09-01

注意点:2025年6月現在、すべてのドメインがRDAPに対応しているわけではない

例えば、.ioドメインは現時点でRDAPに対応していないように見えます。そのような場合はWHOISを使うしかないです。

# rdap github.io
2025-06-08T22:34:57.344817Z  INFO rdap: ICANN RDAP 0.0.22 Command Line Interface
2025-06-08T22:34:57.344858Z  INFO rdap: query type is Domain Lookup for value 'github.io'
2025-06-08T22:34:57.347489Z ERROR rdap: No Bootstrap URLs Found

No Bootstrap URLs Found

RDAPへの完全移行に何年かかるか不明ですが、当分の間はドメインの種類ごとにWHOISとRDAPを使い分ける必要があるということです。

実用上はRDAPダメそうならWHOISにフォールバックするような実装になるでしょう。これはメンドクサイ・・・。

参考資料


https://blog.tpdn.kim/entry/goodbye-whois-hello-rdap/

Discussion