はじめに
サーバ運用業務ではサーバログ調査時に、各種サービスログ内の接続元IPアドレスよりwhoisコマンドを使い国やCIDR等の情報を取得するケースがよくあります。
昨今、whois情報が正しく管理されていない事によるセキュリティ問題が影響し、whoisの段階的廃止に向けた動きが活発な状況であるため、代替となるRDAPのコマンドラインツールを使い各種情報の取得が可能か確認してみます。
また、whoisコマンドと比較して取得情報の差異があるかについても確認してみます。
実行環境
- OS:Kali Linux 2024.4
- OSS:ican-rdap(rust) 0.0.22
RDAPコマンドラインツールのインストール
ICANNが公開している「icann-ldap」をインストールします
github - icann/icann-rdap
https://github.com/icann/icann-rdap/wiki
今回は、Rustのパッケージマネージャのcargoよりインストールします。
※注:make等のbuildツール(build-essential等)はインストール済みである事
・kali linux 2024.4の場合
# apt install cargo
# cargo install icann-rdap-cli
# ls -al ~/.cargo/bin/rdap
-rwxr-xr-x 1 root root 17636472 Aug 9 11:13 /root/.cargo/bin/rdap
本記事のインストール手順では、~/.cargo/bin/以下にrdapコマンドが出力されるため、パスを通す、または、/usr/local/binなどにrdapコマンドを適宜配置して使用します
・(参考程度のおまけ)ubuntu 24の場合
ubuntu24の標準パッケージでインストールされるrustcパッケージのバージョンはやや古いため、最新のRDAPコマンドラインツールを使用する場合はcargo-1.82をインストールします
# apt install cargo-1.82 rustc-1.82
# cargo-1.82 install icann-rdap-cli
hawkコマンドの紹介
※コマンド実行に必須ではないため、不要な方はお手数ですが読み飛ばしてください
rdapコマンドラインツールを使用する前に、json,yaml,csv形式の各種ファイルに対応したhawk(同じくrust製)という大変便利なツールを作成された方がいらっしゃったため、今回はこちらも一緒にインストールします。
・hawkコマンドのインストール
# cargo install hawk-data
※必要に応じて~/.cargo/bin/hawkへパスを通す、/usr/local/bin/へ配置
RDAPコマンドラインツールの実行
RDAPコマンドはデフォルトでhttpsで通信が発生するため、外部サーバへの443/tcp接続がiptables、または、各種ファイアウォール機器等で許可されている必要があります。
1. IPアドレスでの検索
# rdap 8.8.8.8
2. ドメイン名での検索
# rdap google.com
3. 出力形式の変更
# rdap -O markdown 8.8.8.8
# rdap -O json 8.8.8.8
# rdap -O pretty-json 8.8.8.8
特定の情報を取得してみる
※jqパッケージが未インストールの場合は以下
# apt install jq
1. CIDR情報の取得
あるIPアドレスに対し、不正アタックの防御などでスクリプトや設定ファイル内での使用を想定してCIDR情報のみを取得してみます
# rdap -O json 198.51.100.1 | jq -r '.cidr0_cidrs[] | "\(.v4prefix)/\(.length)"'
2025-08-09T03:37:08.654149Z INFO rdap: ICANN RDAP 0.0.22 Command Line Interface
2025-08-09T03:37:08.654167Z INFO rdap: query type is IpV4 Address Lookup for value '198.51.100.1'
198.51.100.0/24
ログレベルオプション(※-L off)を付与し不要な出力を抑制します
# rdap -L off -O json 198.51.100.1 | jq -r '.cidr0_cidrs[] | "\(.v4prefix)/\(.length)"'
198.51.100.0/24
2. abuse連絡先メールアドレスの取得
abuseの連絡先メールアドレスを取得してみます。
# rdap -L off -O json 198.51.100.1 | jq -r '.entities[].entities[] | select(.roles | index("abuse")).vcardArray[1][] | select(.[0] == "email") | .[3]'
abuse@iana.org
3. ドメイン有効期限情報の取得
ドメイン有効期限情報を取得してみます。
# rdap -L off -O json example.com | jq -r '.events[] | select(.eventAction == "expiration") | .eventDate'
2026-08-13T04:00:00Z
4. hawkコマンドを使用したwhois情報の取得
hawkコマンドではjsonの全体構造を確認できるため、内容を確認しながらデータを取得してみます。
※今回のrdapツールではデータ形式の問題のためか、json指定でレコードが取得できなかったためpretty-jsonへ変更して取得しています。
# rdap -L off -O json 198.51.100.1 | hawk '. | info'
=== Data Information ===
Total records: 0
# rdap -L off -O pretty-json 198.51.100.1 | hawk '. | info'
=== Data Information ===
Total records: 1
Type: Single Object
Fields: 16
Field Details:
rdapConformance Array (e.g., [4 items])
notices Array (e.g., [3 items])
objectClassName String (e.g., "ip network")
handle String (e.g., "NET-198-51-100-0-1")
remarks Array (e.g., [1 items])
links Array (e.g., [2 items])
events Array (e.g., [2 items])
status Array (e.g., [1 items])
port43 String (e.g., "whois.arin.net")
entities Array (e.g., [1 items])
startAddress String (e.g., "198.51.100.0")
endAddress String (e.g., "198.51.100.255")
ipVersion String (e.g., "v4")
name String (e.g., "TEST-NET-1")
parentHandle String (e.g., "NET-198-0-0-0-0")
cidr0_cidrs Array (e.g., [1 items])
Array Fields:
rdapConformance [4 items]
notices [3 items]
└─ title, description, links
remarks [1 items]
└─ title, description
links [2 items]
└─ value, rel, href, type
events [2 items]
└─ eventAction, eventDate
status [1 items]
entities [1 items]
└─ objectClassName, handle, links, events, port43, entities, vcardArray, roles
cidr0_cidrs [1 items]
└─ v4prefix, length
全体構造をわかりやすく出力してくれてとっても便利!
hawkでstatus情報を取得してみる
# rdap -L off -O pretty-json 198.51.100.1 | hawk '.status[0]'
reserved
whoisとの取得情報の差異について
※調査中です。体感的にRDAPの方がCIDRについては正確に取れている気がします。
終わりに
rdapによるwhois情報の取得はいかがでしたでしょうか。
whois情報を何かしらの目的でスクリプトで使用したい方、または、既に何らかの運用スクリプトで使用中の方がおりましたら、一度rdapでの情報取得をお試しいただければと思います。