GithubHelp home page GithubHelp logo

gerhut / dnsz Goto Github PK

View Code? Open in Web Editor NEW

This project forked from silverwind/dnsz

0.0 2.0 0.0 145 KB

Generic DNS zone file parser and stringifier

License: BSD 2-Clause "Simplified" License

Makefile 3.74% JavaScript 96.26%

dnsz's Introduction

dnsz

Generic DNS zone file parser and stringifier

All current and future record types are supported as the module makes no effort to parse a record's content. It is highly configurable and has minimal dependencies.

Installation

$ npm i dnsz

Example

const dnsz = require("dnsz");

const data = dnsz.parse("example.com 60 IN A 1.2.3.4");
// => {records: [{name: "example.com", ttl: 60, class: "IN", type: "A", content: "1.2.3.4"}]}

dnsz.stringify(data);
// => ";; A Records\nexample.com.\t60\tIN\tA\t1.2.3.4\n"

API

dnsz.parse(str, [opts])

Parse a string of a DNS zone file and returns a data object.

  • opts.replaceOrigin string: When specified, replaces any @ in name or content with it. Default: null.
  • opts.crlf boolean: When true, emit \r\n instead of \n in header. Default: false.
  • opts.defaultTTL number: Default TTL when absent and $TTL is not present. Default: 60.
  • opts.dots boolean: Ensure trailing dots on FQDNs in content. Supports a limited amount of record types. Default: false.

dnsz.stringify(data, [opts])

Parse a data object and return a string with the zone file contents.

  • opts.sections boolean: Whether to group records into sections. Default: true.
  • opts.crlf boolean: When true, emit \r\n instead of \n for the resulting zone file. Default: false.
  • opts.dots boolean: Ensure trailing dots on FQDNs in content. Supports a limited amount of record types. Default: false.

data object

  • records: Array of record with these props:
    • name: The lowercase DNS name without a trailing dot, e.g. "example.com".
    • ttl: The TTL in seconds, e.g. 60.
    • class: The DNS class, e.g. "IN".
    • type: The record type, e.g. "A".
    • content: The record content, e.g. "2001:db8::1" or "example.com.".
    • comment: A comment, e.g. "a comment", null if absent.
  • origin: The value of $ORIGIN in the zone file.
  • ttl: The value of $TTL in the zone file.
  • header: An optional header at the start of the file. Can be multiline. Does not include comment markers.

If data.origin is specified, the following things happen in the zone file output:

  • A $ORIGIN variable is added.
  • All occurences of data.origin within content are replaced with @.
  • If data.origin matches the name of a record, name is replaced with @.

Example zone file

$ORIGIN originzone.com.

;; SOA Records
@   3600    IN  SOA originzone.com. root.originzone.com. 2031242781 7200 3600 86400 3600

;; A Records
@   60  IN  A   1.2.3.4 ; a comment
mx  60  IN  A   1.2.3.4 ; another comment

;; AAAA Records
@   120 IN  AAAA    2001:db8::1
mx  120 IN  AAAA    2001:db8::1

Example data object

{
  "origin": "originzone.com",
  "records": [
    {
      "name": "originzone.com",
      "ttl": 3600,
      "class": "IN",
      "type": "SOA",
      "content": "originzone.com. root.originzone.com. 2031242781 7200 3600 86400 3600",
      "comment": null
    },
    {
      "name": "originzone.com",
      "ttl": 60,
      "class": "IN",
      "type": "A",
      "content": "1.2.3.4",
      "comment": "a comment"
    },
    {
      "name": "mx",
      "ttl": 60,
      "class": "IN",
      "type": "A",
      "content": "1.2.3.4",
      "comment": "another comment"
    },
    {
      "name": "originzone.com",
      "ttl": 120,
      "class": "IN",
      "type": "AAAA",
      "content": "2001:db8::1",
      "comment": null
    },
    {
      "name": "mx",
      "ttl": 120,
      "class": "IN",
      "type": "AAAA",
      "content": "2001:db8::1",
      "comment": null
    }
  ]
}

License

© silverwind, distributed under BSD licence

dnsz's People

Contributors

gerhut avatar silverwind avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.