WHOISの後継プロトコルRDAPに触れてみる

ドメイン情報の参照する際に使うwhoisコマンド。
whoisプロトコルは43番ポートを使ってドメイン情報をテキストでやり取りするシンプルなもの。

しかし、決められたフォーマットがないためサーバーによってレスポンス結果が異なるということがある。
これはプログラムなどから使う場合はとても不便なのが実情。

他にも色々と問題があり、それらを解決した新しいプロトコルがRDAP(Registration Data Access Protocol)ということ。

RDAPの特徴

  • RESTfulなAPI
  • JSON形式のレスポンス
  • フォーマットが決まっているので機械可読性が高い
  • Bootstrap

RESTfulなAPI

HTTPを使って、RESTfulで問い合わせができる。

例えばAPNICに問合わせる場合

1
2
3
4
5
6
7
8
# ip
https://rdap.apnic.net/ip/xxx.xxx.xxx.xxx/

# domain
https://rdap.apnic.net/domain/DOMAIN-NAME/

# AS番号
https://rdap.apnic.net/autnum/XXXXX/

という形となる。

JSON形式のレスポンス

上記のようにと言わせると、json形式でデータを得られる。
しかもフォーマットが決まっているのでプログラムなどから扱いやすい。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// http://rdap.apnic.net/ip/221.112.0.0 の結果
{
"handle" : "221.112.0.0 - 221.119.255.255",
"startAddress" : "221.112.0.0",
"endAddress" : "221.119.255.255",
"ipVersion" : "v4",
"name" : "JPNIC-NET-JP",
"type" : "ALLOCATED PORTABLE",
"country" : "JP",
"objectClassName" : "ip network",
"entities" : [ {
"handle" : "IRT-JPNIC-JP",
"vcardArray" : [ "vcard", [ [ "version", { }, "text", "4.0" ], [ "fn", { }, "text", "IRT-JPNIC-JP" ], [ "kind", { }, "text", "group" ], [ "email", {
"pref" : "1"
}, "text", "[email protected]" ], [ "adr", {
"label" : "Urbannet-Kanda Bldg 4F, 3-6-2 Uchi-Kanda\\nChiyoda-ku, Tokyo 101-0047, Japan"
}, "text", [ "", "", "", "", "", "", "" ] ], [ "email", { }, "text", "[email protected]" ] ] ],
"roles" : [ "abuse" ],
"objectClassName" : "entity",
"links" : [ {
"value" : "http://rdap.apnic.net/ip/221.112.0.0/13",
"rel" : "self",
"href" : "http://rdap.apnic.net/entity/IRT-JPNIC-JP",
"type" : "application/rdap+json"
} ]
}, {
"handle" : "JNIC1-AP",
"vcardArray" : [ "vcard", [ [ "version", { }, "text", "4.0" ], [ "fn", { }, "text", "Japan Network Information Center" ], [ "kind", { }, "text", "group" ], [ "adr", {
"label" : "Urbannet-Kanda Bldg 4F\\n3-6-2 Uchi-Kanda\\nChiyoda-ku, Tokyo 101-0047,Japan"
}, "text", [ "", "", "", "", "", "", "" ] ], [ "tel", {
"type" : "voice"
}, "text", "+81-3-5297-2311" ], [ "tel", {
"type" : "fax"
}, "text", "+81-3-5297-2312" ], [ "email", { }, "text", "[email protected]" ] ] ],
"roles" : [ "technical", "administrative" ],
"objectClassName" : "entity",
"links" : [ {
"value" : "http://rdap.apnic.net/ip/221.112.0.0/13",
"rel" : "self",
"href" : "http://rdap.apnic.net/entity/JNIC1-AP",
"type" : "application/rdap+json"
} ]
} ],
"remarks" : [ {
"title" : "description",
"description" : [ "Japan Network Information Center" ]
} ],
"links" : [ {
"value" : "http://rdap.apnic.net/ip/221.112.0.0/13",
"rel" : "self",
"href" : "http://rdap.apnic.net/ip/221.112.0.0/13",
"type" : "application/rdap+json"
} ],
"events" : [ {
"eventAction" : "last changed",
"eventDate" : "2015-08-26T01:25:52Z"
} ],
"rdapConformance" : [ "rdap_level_0" ],
"notices" : [ {
"title" : "Source",
"description" : [ "Objects returned came from source", "APNIC" ]
}, {
"title" : "Terms and Conditions",
"description" : [ "This is the APNIC WHOIS Database query service. The objects are in RDAP format." ],
"links" : [ {
"value" : "http://rdap.apnic.net/ip/221.112.0.0",
"rel" : "terms-of-service",
"href" : "http://www.apnic.net/db/dbcopyright.html",
"type" : "text/html"
} ]
} ],
"port43" : "whois.apnic.net"
}

Bootstrap

検索対象となるIPアドレスなどがどのRIP(Regional Internet Registry: 地域インターネットレジストリ)に登録されてるかをBootstrapファイルを参照することでわかるようになる。

たとえば管轄外のリソースへの問合せがあった場合、適切なサーバーにリダイレクトするというような処理を行うこともできる。
現在はレジストリを人手で探しているので、これにより自動化が捗る。

RDAPを試す

2017/07 現在においてサービスを実際に提供しているのは以下のみ。

APNICのNIR(国別レジストリ)は検討中らしい。

ということでお試ししてみる。
jsで簡単に

1
2
3
4
5
6
7
8
9
10
11
12
const fetch = require('node-fetch')
const url = 'https://rdap.apnic.net/ip/133.130.35.170'

const fetchRdap = async function(url) {
let response = await fetch(url)
let json = await response.json()
return json
}

fetchRdap(url)
.then(data => console.log(data))
.catch(reason => console.log(reason.message))

で以下のようにな結果が取得できる

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
{
"handle" : "133.0.0.0 - 133.255.255.255",
"startAddress" : "133.0.0.0",
"endAddress" : "133.255.255.255",
"ipVersion" : "v4",
"name" : "JPNIC-NET-JP-ERX",
"type" : "ALLOCATED PORTABLE",
"country" : "JP",
"objectClassName" : "ip network",
"entities" : [ {
"handle" : "JNIC1-AP",
"vcardArray" : [ "vcard", [ [ "version", { }, "text", "4.0" ], [ "fn", { }, "text", "Japan Network Information Center" ], [ "kind", { }, "text", "group" ], [ "adr", {
"label" : "Urbannet-Kanda Bldg 4F\\n3-6-2 Uchi-Kanda\\nChiyoda-ku, Tokyo 101-0047,Japan"
}, "text", [ "", "", "", "", "", "", "" ] ], [ "tel", {
"type" : "voice"
}, "text", "+81-3-5297-2311" ], [ "tel", {
"type" : "fax"
}, "text", "+81-3-5297-2312" ], [ "email", { }, "text", "[email protected]" ] ] ],
"roles" : [ "technical", "administrative" ],
"objectClassName" : "entity",
"links" : [ {
"value" : "https://rdap.apnic.net/ip/133.0.0.0/8",
"rel" : "self",
"href" : "https://rdap.apnic.net/entity/JNIC1-AP",
"type" : "application/rdap+json"
} ]
} ],
"remarks" : [ {
"title" : "description",
"description" : [ "Japan Network Information Center" ]
}, {
"title" : "remarks",
"description" : [ "133/8 block is an ERX range which transfered from", "ARIN to APNIC on 2009-10-30", "The original allocation date was 1997-03-01", "Please search whois.nic.ad.jp for more information", "about this range", "% whois -h whois.nic.ad.jp ***.***.***.***/e" ]
} ],
"links" : [ {
"value" : "https://rdap.apnic.net/ip/133.0.0.0/8",
"rel" : "self",
"href" : "https://rdap.apnic.net/ip/133.0.0.0/8",
"type" : "application/rdap+json"
} ],
"events" : [ {
"eventAction" : "last changed",
"eventDate" : "2009-10-30T00:51:09Z"
} ],
"rdapConformance" : [ "rdap_level_0" ],
"notices" : [ {
"title" : "Source",
"description" : [ "Objects returned came from source", "APNIC" ]
}, {
"title" : "Terms and Conditions",
"description" : [ "This is the APNIC WHOIS Database query service. The objects are in RDAP format." ],
"links" : [ {
"value" : "https://rdap.apnic.net/ip/133.130.35.170",
"rel" : "terms-of-service",
"href" : "http://www.apnic.net/db/dbcopyright.html",
"type" : "text/html"
} ]
} ],
"port43" : "whois.apnic.net"
}

まとめ

whoisに比べると扱いやすく、特にプログラムなどからの操作がようになるので、
自動化がはかどりそうな。
実装と普及が進むのが待ち望まれる。

参考にしたページ

RDAP ~次世代WHOISプロトコル~ の紹介
DNS Summer Day 2017~DNS気になる話

Comments