見出し画像

Google Apps ScriptでDNS名前解決

GAS(Google Apps Script)を利用してDNS(Domain Name System)名前解決を行う方法について解説します。
GASでは、標準のDNS名前解決ライブラリが提供されていません。そこで、Google Public DNSを使用して名前解決を行います。


▍Google Public DNSとは

Google Public DNSは、Googleが提供する無料のDNSのサービスです。Web サービスとして提供されているため、HTTPリクエストを送信することで、名前解決の結果を取得できます。

以下はドメイン名 example.com に対するDNSの問い合わせ結果の例です。

{
  "Status": 0 /* NOERROR */,
  "TC": false,
  "RD": true,
  "RA": true,
  "AD": true,
  "CD": false,
  "Question": [
    {
      "name": "example.com.",
      "type": 1 /* A */
    }
  ],
  "Answer": [
    {
      "name": "example.com.",
      "type": 1 /* A */,
      "TTL": 3011,
      "data": "93.184.215.14"
    }
  ]
}

Answer 部分の data でIPアドレスを確認できます。なお、冒頭の Status: 0 は、DNSの問い合わせがエラーなく正常に完了したことを意味します。

▍GASでの実装

Google Apps ScriptでDNS情報を取得するための関数を以下に示します。この関数は、指定されたFQDN(Fully Qualified Domain Name: 完全修飾ドメイン名)に対してAレコードを問い合わせ、最初の結果を返します。

/**
  * 最初のレコードを取得
  * @param {string} fqdn - FQDN
  * @param {string} type - レコードの種類(初期値はA)
  * @returns {string} - 名前解決の結果
  */
function resolveFirstRecord(fqdn, type="A") {
  const url = `https://dns.google.com/resolve?name=${fqdn}&type=${type}`;
  const response = UrlFetchApp.fetch(url);
  const json = JSON.parse(response.getContentText());
  
  if (json.Status === 0 && json.Answer) {
    return json.Answer[0].data;
  } else {
    return `Failed to resolve DNS for ${fqdn}`;
  }
}


function myFunction() {
  const result = resolveFirstRecord("example.com");
  console.log(result);
}

A以外のレコードを問い合わせるには、以下のように引数 type を指定します。

// AAAAレコードを問い合わせ
resolveFirstRecord("example.com", type="AAAA");

▍おわりに

Google Apps Scriptには直接的なDNS名前解決のライブラリはありませんが、Google Public DNSを通じてHTTPリクエストを送信する方法を使えます。これにより、GAS環境でもDNS情報を取得、使用できます。

ご精読いただき、ありがとうございました!


私たちのデジタル技術活用の記事は以下のマガジンにあります。ぜひご覧ください!


いいなと思ったら応援しよう!