Type conversion utilities for DNS record types, response codes, operation codes, DNS classes, and EDNS0 option codes.
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:
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')); // 999Conversion 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:
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')); // 3Conversion 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:
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')); // 4Conversion 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:
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')); // 3Conversion 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:
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')); // 123Building 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})`);
});
}