An open API service indexing awesome lists of open source software.

https://github.com/silverwind/dnsz

DNS zone file parser and stringifier
https://github.com/silverwind/dnsz

dns dns-zone dns-zone-files nodejs

Last synced: about 1 year ago
JSON representation

DNS zone file parser and stringifier

Awesome Lists containing this project

README

          

# dnsz
[![](https://img.shields.io/npm/v/dnsz.svg?style=flat)](https://www.npmjs.org/package/dnsz) [![](https://img.shields.io/npm/dm/dnsz.svg)](https://www.npmjs.org/package/dnsz) [![](https://img.shields.io/bundlephobia/minzip/dnsz.svg)](https://bundlephobia.com/package/dnsz) [![](https://packagephobia.com/badge?p=dnsz)](https://packagephobia.com/result?p=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 no dependencies.

## Usage

```bash
npm i dnsz
```
```js
import {parseZone, stringifyZone} from "dnsz";

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

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

## API
### parseZone(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.defaultClass` *string*: Default class when absent. Default: `"IN"`.
- `opts.dots` *boolean*: Ensure trailing dots on FQDNs in content. Supports a limited amount of record types. Default: `false`.

### stringifyZone(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

``` ini
$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

``` json
{
"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](https://github.com/silverwind), distributed under BSD licence