2017/07/19

[JavaScript]DNSのゾーンファイル・JSONを解析して相互変換する[dns-zonefile]

クライアント側でDNSのBIND設定が書かれたゾーンファイルを解析しようと思い、良いライブラリがないかとググったところ dns-zonefile を見つけた。
このライブラリはゾーンファイル→JSON、JSON→ゾーンファイルに変換できる。

ということで、dns-zonefileを使い方を紹介する。
CLIで実行できるが、今回はimportして利用する方法をまとめる。

ゾーンファイルからJSONに変換する


// zonefile-to-json.js
import zonefile from 'dns-zonefile';

const file = `$ORIGIN example.com.
$TTL 3600

; A Records
@ IN A 127.0.0.1
www IN A 127.0.0.1
mail IN A 127.0.0.1
`;

const json = zonefile.parse(file);
// json
{
  "$origin": "example.com.",
  "$ttl": "3600",
  "a": [
    {
      "name": "@",
      "ip": "127.0.0.1"
    },
    {
      "name": "www",
      "ip": "127.0.0.1"
    },
    {
      "name": "mail",
      "ip": "127.0.0.1"
    }
  ]
};


JSONからゾーンファイルに変換する


// json-to-zonefile.js
import zonefile from 'dns-zonefile';

const json = {
  "$origin": "example.com.",
  "$ttl": 3600,
  "soa": {},
  "a": [
    {
      "name": "@",
      "ip": "127.0.0.1"
    },
    {
      "name": "www",
      "ip": "127.0.0.1"
    },
    {
      "name": "mail",
      "ip": "127.0.0.1"
    }
  ]
};

const file = zonefile.generate(json);
// file
/*
; Zone: example.com.
; Exported  (yyyy-mm-ddThh:mm:ss.sssZ): 2017-07-13T06:20:19.465Z

$ORIGIN example.com.
$TTL 3600

; SOA Record
@    IN SOA {mname}{rname}(
{serial} ;serial
{refresh} ;refresh
{retry} ;retry
{expire} ;expire
{minimum} ;minimum ttl
)

; NS Records

; MX Records

; A Records
@ IN A 127.0.0.1
www IN A 127.0.0.1
mail IN A 127.0.0.1

; AAAA Records

; CNAME Records

; PTR Records

; TXT Records

; SRV Records

; SPF Records
*/


説明するほどでもないが、parseとgenerateでゾーンファイル・JSONの相互変換ができる。
ただし、for...of文を使っているためIE11では動作しないので注意。


余談だが、私もコントリビュートしていたりするw(大した修正してないけど)



以上

written by @bc_rikko

0 件のコメント :

コメントを投稿