コンテンツにスキップ

DNS Wireformat

Cloudflareは、RFC 1035で定義されたDNSワイヤフォーマットを尊重します。

DNSワイヤフォーマットを使用してクエリを送信するには、ヘッダーaccept: application/dns-messageを設定するか、POSTを使用する場合はcontent-type: application/dns-messageを設定して、クエリのメディアタイプを示します。

DNSワイヤフォーマットを使用したクエリは、POSTまたはGETを使用して送信できます。

POSTの使用

POSTを使用してリクエストを行う場合、DNSクエリはHTTPリクエストのメッセージボディに含まれ、MIMEタイプ(以下参照)はContent-Typeリクエストヘッダーに含まれます。Cloudflareは、クライアントによって送信されたHTTPリクエストのメッセージボディを使用するため、メッセージボディはエンコードしないでください。

以下はリクエストの例です。www.example.comに対する同じDNSクエリをPOSTメソッドで行うと、次のようになります。

:method = POST
:scheme = https
:authority = cloudflare-dns.com
:path = /dns-query
accept = application/dns-message
content-type = application/dns-message
content-length = 33
<33バイトは以下の16進エンコーディングで表されます>
00 00 01 00 00 01 00 00 00 00 00 00 03 77 77 77
07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00
01

そして、ワイヤフォーマットでの回答が返されます。

:status = 200
content-type = application/dns-message
content-length = 64
cache-control = max-age=128
<64バイトは以下の16進エンコーディングで表されます>
00 00 81 80 00 01 00 01 00 00 00 00 03 77 77 77
07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00
01 03 77 77 77 07 65 78 61 6d 70 6c 65 03 63 6f
6d 00 00 01 00 01 00 00 00 80 00 04 C0 00 02 01

これをcURLを使用して試すには、次のように書きます。

Terminal window
echo -n 'q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB' | base64 --decode | curl --header 'content-type: application/dns-message' --data-binary @- https://cloudflare-dns.com/dns-query --output - | hexdump

GETの使用

GETを使用してリクエストを行う場合、DNSクエリはURLにエンコードされます。acceptヘッダーを使用してMIMEタイプを示すことができます(デフォルト: application/dns-message)。

リクエストの例:

Terminal window
curl --header 'accept: application/dns-message' --verbose 'https://cloudflare-dns.com/dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB' | hexdump
* HTTP2を使用中、サーバーはマルチユースをサポート
* 接続状態が変更されました(HTTP/2が確認されました)
* アップグレード後、HTTP/2データをストリームバッファから接続バッファにコピー中: len=0
* ストリームIDを使用: 1 (easy handle 0x7f968700a400)
GET /dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB HTTP/2
Host: cloudflare-dns.com
User-Agent: curl/7.54.0
accept: application/dns-message
* 接続状態が変更されました(MAX_CONCURRENT_STREAMSが更新されました)!
HTTP/2 200
date: Fri, 23 Mar 2018 05:14:02 GMT
content-type: application/dns-message
content-length: 49
cache-control: max-age=0
set-cookie: \__cfduid=dd1fb65f0185fadf50bbb6cd14ecbc5b01521782042; expires=Sat, 23-Mar-19 05:14:02 GMT; path=/; domain=.cloudflare.com; HttpOnly
server: cloudflare-nginx
cf-ray: 3ffe69838a418c4c-SFO-DOG
{ [49バイトのデータ]
100 49 100 49 0 0 493 0 --:--:-- --:--:-- --:--:-- 494
* 接続#0がcloudflare-dns.comホストに残りました
0000000 ab cd 81 80 00 01 00 01 00 00 00 00 03 77 77 77
0000010 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00
0000020 01 c0 0c 00 01 00 01 00 00 0a 8b 00 04 5d b8 d8
0000030 22
0000031