はじめに
RDAP(Registration Data Access Protocol)をCommon Lispから使ってみます。
RDAP(Registration Data Access Protocol)とは
RDAPは、Whoisに代わるドメインやIPアドレス等の登録情報を参照するためのプロトコルです。
Whoisの表示は、ドメインレジストリやIPアドレスレジストリ毎に、異なるテキストフォーマットとなっていますが、
RDAPはJSONにて結果を取得可能です。
まだまだ、あまり普及はしておらず、現時点でRDAPの問い合わせに対応しているTLDは 下記の通り7ドメインです。
https://data.iana.org/rdap/dns.json
Common Lispから問い合わせてみる
RDAPの問い合わせは、HTTP(s)にて行うので、drakmaを使えば簡単です。
drakma、cl-json、babelをつかってます。
試しに適当なIPアドレスの登録情報を問い合わせてみます。
* (rdap-request "https://rdap.apnic.net/ip/192.41.192.129") ((:RDAP-CONFORMANCE "history_version_0" "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/192.41.192.129") (:REL . "terms-of-service") (:HREF . "http://www.apnic.net/db/dbcopyright.html") (:TYPE . "text/html"))))) (:COUNTRY . "JP") (:EVENTS ((:EVENT-ACTION . "last changed") (:EVENT-DATE . "2017-10-18T10:40:02Z"))) (:NAME . "JPNICNET") (:REMARKS ((:DESCRIPTION "Japan Network Information Center" "Urbannet-Kanda Bldg 4F" "3-6-2 Uchi-Kanda" "Chiyoda-ku, Tokyo 101-0047, Japan") (:TITLE . "description")) ((:DESCRIPTION "Email address for spam or abuse complaints : hostmaster@nic.ad.jp") (:TITLE . "remarks"))) (:TYPE . "ASSIGNED PORTABLE") (:END-ADDRESS . "192.41.192.255") (:IP-VERSION . "v4") (:START-ADDRESS . "192.41.192.0") (:HANDLE . "192.41.192.0 - 192.41.192.255") (:OBJECT-CLASS-NAME . "ip network") (:LINKS ((:VALUE . "https://rdap.apnic.net/ip/192.41.192.129") (:REL . "self") (:HREF . "https://rdap.apnic.net/ip/192.41.192.0/24") (:TYPE . "application/rdap+json"))) (:ENTITIES ((:ROLES "technical") (:EVENTS ((:EVENT-ACTION . "last changed") (:EVENT-DATE . "2012-08-28T08:00:01Z"))) (:VCARD-ARRAY "vcard" (("version" NIL "text" "4.0") ("fn" NIL "text" "JPNIC Engineering Group") ("kind" NIL "text" "individual") ("adr" ((:LABEL . "Urbannet-Kanda Bldg 4F 3-6-2 Uchi-Kanda Chiyoda-ku, Tokyo 101-0047,Japan")) "text" ("" "" "" "" "" "" "")) ("tel" ((:TYPE . "voice")) "text" "+81-3-5297-2311") ("tel" ((:TYPE . "fax")) "text" "+81-3-5297-2312") ("email" NIL "text" "hostmaster@nic.ad.jp"))) (:HANDLE . "JE53-AP") (:OBJECT-CLASS-NAME . "entity") (:LINKS ((:VALUE . "https://rdap.apnic.net/ip/192.41.192.129") (:REL . "self") (:HREF . "https://rdap.apnic.net/entity/JE53-AP") (:TYPE . "application/rdap+json")))) ((:ROLES "administrative") (:EVENTS ((:EVENT-ACTION . "last changed") (:EVENT-DATE . "2012-08-28T08:00:04Z"))) (:VCARD-ARRAY "vcard" (("version" NIL "text" "4.0") ("fn" NIL "text" "JPNIC IP Department") ("kind" NIL "text" "individual") ("adr" ((:LABEL . "Urbannet-Kanda Bldg 4F 3-6-2 Uchi-Kanda Chiyoda-ku, Tokyo 101-0047,Japan")) "text" ("" "" "" "" "" "" "")) ("tel" ((:TYPE . "voice")) "text" "+81-3-5297-2311") ("tel" ((:TYPE . "fax")) "text" "+81-3-5297-2312") ("email" NIL "text" "hostmaster@nic.ad.jp"))) (:HANDLE . "JI13-AP") (:OBJECT-CLASS-NAME . "entity") (:LINKS ((:VALUE . "https://rdap.apnic.net/ip/192.41.192.129") (:REL . "self") (:HREF . "https://rdap.apnic.net/entity/JI13-AP") (:TYPE . "application/rdap+json")))) ((:ROLES "abuse") (:EVENTS ((:EVENT-ACTION . "last changed") (:EVENT-DATE . "2017-10-18T10:21:54Z"))) (:VCARD-ARRAY "vcard" (("version" NIL "text" "4.0") ("fn" NIL "text" "IRT-JPNIC-JP") ("kind" NIL "text" "group") ("adr" ((:LABEL . "Urbannet-Kanda Bldg 4F, 3-6-2 Uchi-Kanda Chiyoda-ku, Tokyo 101-0047, Japan")) "text" ("" "" "" "" "" "" "")) ("email" NIL "text" "hostmaster@nic.ad.jp") ("email" ((:PREF . "1")) "text" "hostmaster@nic.ad.jp"))) (:HANDLE . "IRT-JPNIC-JP") (:OBJECT-CLASS-NAME . "entity") (:LINKS ((:VALUE . "https://rdap.apnic.net/ip/192.41.192.129") (:REL . "self") (:HREF . "https://rdap.apnic.net/entity/IRT-JPNIC-JP") (:TYPE . "application/rdap+json"))))) (:PORT-43 . "whois.apnic.net"))