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情報を取得、使用できます。
ご精読いただき、ありがとうございました!
私たちのデジタル技術活用の記事は以下のマガジンにあります。ぜひご覧ください!