zkat’s diary

技術ブログ

Common Lisp からRDAPつかってみる

はじめに

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"))