or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.mdpacket-operations.mdpacket-structure.mdrecord-types.mdutilities.md
tile.json

utilities.mddocs/

Utility Functions

Type conversion utilities for DNS record types, response codes, operation codes, DNS classes, and EDNS0 option codes.

Capabilities

DNS Record Types

Conversion between DNS record type names and numeric values.

const types = require('dns-packet/types');

// Convert type number to string
types.toString(type);

// Convert type string to number
types.toType(name);

Supported Record Types:

  • Basic: A (1), AAAA (28), CNAME (5), NS (2), PTR (12), TXT (16)
  • Mail: MX (15), SOA (6)
  • Service: SRV (33), NAPTR (35)
  • Security: DNSKEY (48), RRSIG (46), DS (43), NSEC (47), NSEC3 (50)
  • Other: CAA (257), HINFO (13), NULL (10), OPT (41), TLSA (52), SSHFP (44)

Usage Examples:

const types = require('dns-packet/types');

// Type to string conversion
console.log(types.toString(1));    // 'A'
console.log(types.toString(28));   // 'AAAA'
console.log(types.toString(15));   // 'MX'
console.log(types.toString(999));  // 'UNKNOWN_999'

// String to type conversion
console.log(types.toType('A'));      // 1
console.log(types.toType('AAAA'));   // 28
console.log(types.toType('MX'));     // 15
console.log(types.toType('INVALID')); // 0

// Case insensitive
console.log(types.toType('a'));      // 1
console.log(types.toType('Aaaa'));   // 28

// Special handling for UNKNOWN_ prefix
console.log(types.toType('UNKNOWN_999')); // 999

DNS Response Codes

Conversion between DNS response code names and numeric values.

const rcodes = require('dns-packet/rcodes');

// Convert response code number to string
rcodes.toString(rcode);

// Convert response code string to number
rcodes.toRcode(code);

Supported Response Codes:

  • NOERROR (0): No error
  • FORMERR (1): Format error
  • SERVFAIL (2): Server failure
  • NXDOMAIN (3): Name does not exist
  • NOTIMP (4): Not implemented
  • REFUSED (5): Query refused
  • YXDOMAIN (6): Name should not exist
  • YXRRSET (7): RRset should not exist
  • NXRRSET (8): RRset does not exist
  • NOTAUTH (9): Not authoritative
  • NOTZONE (10): Name not in zone

Usage Examples:

const rcodes = require('dns-packet/rcodes');

// Response code to string
console.log(rcodes.toString(0));   // 'NOERROR'
console.log(rcodes.toString(3));   // 'NXDOMAIN'
console.log(rcodes.toString(2));   // 'SERVFAIL'
console.log(rcodes.toString(99));  // 'RCODE_99'

// String to response code
console.log(rcodes.toRcode('NOERROR'));   // 0
console.log(rcodes.toRcode('NXDOMAIN'));  // 3
console.log(rcodes.toRcode('SERVFAIL'));  // 2
console.log(rcodes.toRcode('INVALID'));   // 0

// Case insensitive
console.log(rcodes.toRcode('noerror'));   // 0
console.log(rcodes.toRcode('NxDomain'));  // 3

DNS Operation Codes

Conversion between DNS operation code names and numeric values.

const opcodes = require('dns-packet/opcodes');

// Convert operation code number to string
opcodes.toString(opcode);

// Convert operation code string to number
opcodes.toOpcode(code);

Supported Operation Codes:

  • QUERY (0): Standard query
  • IQUERY (1): Inverse query (obsolete)
  • STATUS (2): Server status request
  • NOTIFY (4): Zone change notification
  • UPDATE (5): Dynamic update

Usage Examples:

const opcodes = require('dns-packet/opcodes');

// Operation code to string
console.log(opcodes.toString(0));   // 'QUERY'
console.log(opcodes.toString(4));   // 'NOTIFY'
console.log(opcodes.toString(5));   // 'UPDATE'
console.log(opcodes.toString(99));  // 'OPCODE_99'

// String to operation code
console.log(opcodes.toOpcode('QUERY'));   // 0
console.log(opcodes.toOpcode('NOTIFY'));  // 4
console.log(opcodes.toOpcode('UPDATE'));  // 5
console.log(opcodes.toOpcode('INVALID')); // 0

// Case insensitive
console.log(opcodes.toOpcode('query'));   // 0
console.log(opcodes.toOpcode('Notify'));  // 4

DNS Classes

Conversion between DNS class names and numeric values.

const classes = require('dns-packet/classes');

// Convert class number to string
classes.toString(klass);

// Convert class string to number
classes.toClass(name);

Supported DNS Classes:

  • IN (1): Internet class (most common)
  • CS (2): CSNET class (obsolete)
  • CH (3): Chaos class
  • HS (4): Hesiod class
  • ANY (255): Any class (queries only)

Usage Examples:

const classes = require('dns-packet/classes');

// Class to string
console.log(classes.toString(1));    // 'IN'
console.log(classes.toString(3));    // 'CH'
console.log(classes.toString(255));  // 'ANY'
console.log(classes.toString(99));   // 'UNKNOWN_99'

// String to class
console.log(classes.toClass('IN'));      // 1
console.log(classes.toClass('CH'));      // 3
console.log(classes.toClass('ANY'));     // 255
console.log(classes.toClass('INVALID')); // 0

// Case insensitive
console.log(classes.toClass('in'));      // 1
console.log(classes.toClass('Ch'));      // 3

EDNS0 Option Codes

Conversion between EDNS0 option code names and numeric values.

const optioncodes = require('dns-packet/optioncodes');

// Convert option code number to string
optioncodes.toString(type);

// Convert option code string/number to number
optioncodes.toCode(name);

Supported EDNS0 Options:

  • LLQ (1): Long-Lived Queries
  • UL (2): Update Lease
  • NSID (3): Name Server Identifier
  • DAU (5): DNSSEC Algorithm Understood
  • DHU (6): DS Hash Understood
  • N3U (7): NSEC3 Hash Understood
  • CLIENT_SUBNET (8): Client subnet information
  • EXPIRE (9): EDNS Expire
  • COOKIE (10): DNS Cookies
  • TCP_KEEPALIVE (11): TCP keepalive
  • PADDING (12): Padding
  • CHAIN (13): Chain query
  • KEY_TAG (14): Key tag
  • DEVICEID (26946): Device ID

Usage Examples:

const optioncodes = require('dns-packet/optioncodes');

// Option code to string
console.log(optioncodes.toString(8));     // 'CLIENT_SUBNET'
console.log(optioncodes.toString(12));    // 'PADDING'
console.log(optioncodes.toString(10));    // 'COOKIE'
console.log(optioncodes.toString(999));   // 'OPTION_999'

// String/number to option code
console.log(optioncodes.toCode('CLIENT_SUBNET')); // 8
console.log(optioncodes.toCode('PADDING'));       // 12
console.log(optioncodes.toCode('COOKIE'));        // 10
console.log(optioncodes.toCode(12));              // 12 (number passthrough)
console.log(optioncodes.toCode('OPTION_999'));    // 999
console.log(optioncodes.toCode('INVALID'));       // -1

// Case insensitive
console.log(optioncodes.toCode('client_subnet')); // 8
console.log(optioncodes.toCode('Padding'));       // 12

// Pattern matching for OPTION_N format
console.log(optioncodes.toCode('OPTION_123'));    // 123

Utility Usage in Practice

Building a DNS Query:

const dnsPacket = require('dns-packet');
const types = require('dns-packet/types');
const classes = require('dns-packet/classes');

const packet = {
  type: 'query',
  id: 1234,
  flags: dnsPacket.RECURSION_DESIRED,
  questions: [{
    type: types.toString(1),     // 'A'
    class: classes.toString(1),  // 'IN'
    name: 'example.com'
  }]
};

Processing a DNS Response:

const response = dnsPacket.decode(buffer);
const rcodes = require('dns-packet/rcodes');

// Check response code
const rcode = response.flags & 0x0F; // Extract RCODE from flags
if (rcode !== 0) {
  console.log('DNS error:', rcodes.toString(rcode));
}

// Process answers
response.answers.forEach(answer => {
  console.log(`${answer.name} ${answer.type} ${answer.data}`);
});

EDNS0 Option Processing:

const optioncodes = require('dns-packet/optioncodes');

// Find OPT record in additionals
const optRecord = packet.additionals.find(r => r.type === 'OPT');
if (optRecord) {
  optRecord.options.forEach(option => {
    const optionName = optioncodes.toString(option.code);
    console.log(`EDNS0 option: ${optionName} (${option.code})`);
  });
}