2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

whois代替のrdapコマンドラインツールを使ってみる - icann-rdap-cli

Last updated at Posted at 2025-08-27

はじめに

サーバ運用業務ではサーバログ調査時に、各種サービスログ内の接続元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での情報取得をお試しいただければと思います。

2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?