DNSDBの使い方

※API_KEYを取得している前提で進めます。

使い方

APIにはv1とv2の2種類がある。
ここではv2について説明する。

とりあえずリクエスト

試しにリクエストを投げてみる。

curl -H 'X-API-Key:<API_KEY>' https://api.dnsdb.info/dnsdb/v2/lookup/rrset/name/google.com?limit=1

結果はJSONL形式で返る。公式にはHTTPヘッダにAccept:application/x-ndjsonを指定する必要があると書かれているが、恐らく指定しなくてもデフォルトでJSONLが返る。

{"cond":"begin"}
{"obj":{"count":2,"time_first":1594197706,"time_last":1594197706,"rrname":"google.com.","rrtype":"A","bailiwick":".","rdata":["64.233.161.100","64.233.161.101","64.233.161.102","64.233.161.113","64.233.161.138","64.233.161.139"]}}
{"cond":"limited","msg":"Result limit reached"}

最初の1行は{“cond”:”begin”}で始まり、最後の1行は{“cond”:”limited”}もしくは{“cond”:”succeeded”}を持つことを期待される。言い換えれば、最後の1行のcondが”limited”もしくは”succeeded”ではない場合、正しい応答ではないことが想定される。

API Key

X-API-KeyヘッダにAPI_KEYを渡す必要がある。誤ったAPI_KEYを渡した場合やX-API-Keyヘッダが存在しない場合にはHTTP403が返る。

APIの種類

  • lookup
  • summarize
  • ping
  • rate_limit

の4種類が存在するが、主に使うものは最初の2つ。
何れのAPIも、https://api.dnsdb.info/dnsdb/v2/に続くURLにリクエストを送信する。

lookup API

lookup APIには、2つの検索方法が存在する。

  • rrset
  • rdata

rrset

RRsetを検索する。

lookup/rrset/TYPE/VALUE/RRTYPE/BAILIWICK

TYPE(必須):nameもしくはraw
VALUE(必須):nameの場合ドメイン名(前方一致、後方一致可)
RRTYPE(任意):デフォルトはANY
BAILIWICK(任意)

bailiwickとは

bailiwickについては公式でも説明されている。公式ドキュメントによれば、「passive DNSレプリケーションで観測されるDNSDBにおけるRRsetの”bailiwick”は、RRsetを提供するネームサーバーに委任された最も近いゾーンである。ゾーンファイルで観測されるDNSDBにおけるRRsetの”bailiwick”は、単に RRsetを含むゾーン名である。」とある。
(自分でも説明を書いてみた)
https://1507t.xyz/dns-bailiwick

DNSDBにおけるbailiwick(恐らく内部名のことを指している)とは、RFC7719によるシブリングドメインであると推察される。

rdata

RDataからの逆lookupを行う。

lookup/rdata/TYPE/VALUE/RRTYPE

TYPE(必須):name, ip, rawのいずれか
VALUE(必須):nameの場合ドメイン名(前方一致、後方一致可)、ipの場合IPv4/IPv6のアドレス・プレフィックス長・アドレス範囲(スラッシュはカンマに変える必要あり)
RRTYPE(任意):ipの場合はA,AAAA,ANYのいずれかのみ、デフォルトはANY

例えば、Aレコードが142.250.207.46であるrdataを調べたいときには、lookup/rdata/ip/142.250.207.46/Aとする。

レスポンス

公式ドキュメントを読めば分かると思います。

 

summarize API

summarize APIは、lookup APIの結果を要約する。

クエリパラメータについて

注目すべき点としては、

  • limit=0とすれば最大数の結果が返る
  • aggr=tとすれば同一のrrsetが集約されなくなる
  • offset=<自然数>とした場合には、結果の順序が保持されない・結果が欠落する・結果が重複する可能性がある(クエリ毎にレスポンスを再計算するため)
  • time_*の各パラメータは、現在時刻を基準とした負数(秒)を与えることができる

辺りかと。

 

余談

Chrome拡張機能を使うと、簡単にリクエスト可能。
公式ドキュメントに記載されていないFlexible Searchも可能。
内部ではdnsdb/v2/glob/で始まるURLを叩いているようなので興味があれば見てみると良いことがあるかも。
内部で叩いているURLはRecent Queriesのタブから見れます。

 

参考

公式ドキュメント

その他

 

コメント

タイトルとURLをコピーしました