@eryx/dns Module

Summary

Functions

dns.proto.writeName(b: BufferBuilder.BufferBuilder, nameOffsets: NameOffsets, name: string)()
dns.proto.parseName(buf: buffer, offset: number)(string, number)
dns.proto.writeHeader(b: BufferBuilder.BufferBuilder, header: Header)()
dns.proto.parseHeader(buf: buffer, offset: number)(Header, number)
dns.proto.writeQuestion(b: BufferBuilder.BufferBuilder, nameOffsets: NameOffsets, question: Question)()
dns.proto.parseQuestion(buf: buffer, offset: number)(Question, number)
dns.proto.writeEdnsOptions(b: BufferBuilder.BufferBuilder, options: { EdnsOption })()
dns.proto.writeAnswer(b: BufferBuilder.BufferBuilder, nameOffsets: NameOffsets, answer: Answer)()
dns.proto.parseAnswer(buf: buffer, offset: number)(Answer, number)
dns.proto.buildPacket(header: Header, questions: { Question }, answers: { Answer }?, authorities: { Answer }?, additional: { Answer }?)buffer
dns.query.prepareQuery(questions: { Question }, config: { id: number?, opcode: keyof<<typeof>> | number?, recursive: boolean?, authenticData: boolean?, checkingDisabled: boolean?, edns: EdnsConfig? }?)Message
dns.query.queryUdp(host: string, message: Message, config: { timeout: number?, port: number?, useTcpIfTruncated: boolean? }?)Message
dns.query.sendUdp(host: string | socket.Socket, message: Message, config: { timeout: number?, port: number? }?)()
dns.query.recvUdp(host: string | socket.Socket, config: { timeout: number?, port: number? }?)Message
dns.query.queryTcp(host: string, message: Message, config: { timeout: number?, port: number? }?)Message
dns.query.sendTcp(sock: socket.Socket | ssl.SslSocket, message: Message, config: { timeout: number? }?)()
dns.query.recvTcp(sock: socket.Socket | ssl.SslSocket, config: { timeout: number? }?)Message
dns.query.queryTls(host: string, message: Message, config: { timeout: number?, port: number? }?)Message
dns.query.zoneTransferAxfr(host: string, zone: string, config: { timeout: number?, port: number?, relativise: boolean? }?){ Answer }
dns.query.zoneTransferIxfr(host: string, zone: string, serial: number, config: { timeout: number?, port: number?, relativise: boolean? }?){ Answer }

API Reference

Functions

dns.buildOptAnswer

dns.buildOptAnswer(edns: EdnsConfig?)Answer?

proto

dns.proto.writeName

dns.proto.writeName(b: BufferBuilder.BufferBuilder, nameOffsets: NameOffsets, name: string)()

dns.proto.parseName

dns.proto.parseName(buf: buffer, offset: number)(string, number)

dns.proto.writeHeader

dns.proto.writeHeader(b: BufferBuilder.BufferBuilder, header: Header)()

dns.proto.parseHeader

dns.proto.parseHeader(buf: buffer, offset: number)(Header, number)

dns.proto.writeQuestion

dns.proto.writeQuestion(b: BufferBuilder.BufferBuilder, nameOffsets: NameOffsets, question: Question)()

dns.proto.parseQuestion

dns.proto.parseQuestion(buf: buffer, offset: number)(Question, number)

dns.proto.writeEdnsOptions

dns.proto.writeEdnsOptions(b: BufferBuilder.BufferBuilder, options: { EdnsOption })()

dns.proto.parseEdnsOptions

dns.proto.parseEdnsOptions(buf: buffer){ EdnsOption }

dns.proto.writeAnswer

dns.proto.writeAnswer(b: BufferBuilder.BufferBuilder, nameOffsets: NameOffsets, answer: Answer)()

dns.proto.parseAnswer

dns.proto.parseAnswer(buf: buffer, offset: number)(Answer, number)

dns.proto.buildPacket

dns.proto.buildPacket(header: Header, questions: { Question }, answers: { Answer }?, authorities: { Answer }?, additional: { Answer }?)buffer

dns.proto.parsePacket

dns.proto.parsePacket(buf: buffer)Message

query

dns.query.prepareQuery

dns.query.prepareQuery(questions: { Question }, config: { id: number?, opcode: keyof<<typeof>> | number?, recursive: boolean?, authenticData: boolean?, checkingDisabled: boolean?, edns: EdnsConfig? }?)Message

dns.query.queryUdp

dns.query.queryUdp(host: string, message: Message, config: { timeout: number?, port: number?, useTcpIfTruncated: boolean? }?)Message

dns.query.sendUdp

dns.query.sendUdp(host: string | socket.Socket, message: Message, config: { timeout: number?, port: number? }?)()

dns.query.recvUdp

dns.query.recvUdp(host: string | socket.Socket, config: { timeout: number?, port: number? }?)Message

dns.query.queryTcp

dns.query.queryTcp(host: string, message: Message, config: { timeout: number?, port: number? }?)Message

dns.query.sendTcp

dns.query.sendTcp(sock: socket.Socket | ssl.SslSocket, message: Message, config: { timeout: number? }?)()

dns.query.recvTcp

dns.query.recvTcp(sock: socket.Socket | ssl.SslSocket, config: { timeout: number? }?)Message

dns.query.queryTls

dns.query.queryTls(host: string, message: Message, config: { timeout: number?, port: number? }?)Message

dns.query.zoneTransferAxfr

dns.query.zoneTransferAxfr(host: string, zone: string, config: { timeout: number?, port: number?, relativise: boolean? }?){ Answer }

dns.query.zoneTransferIxfr

dns.query.zoneTransferIxfr(host: string, zone: string, serial: number, config: { timeout: number?, port: number?, relativise: boolean? }?){ Answer }

Types

Header

type Header = { id: number, qr: keyof<<typeof>>, opcode: keyof<<typeof>> | number, aa: boolean, tc: boolean, rd: boolean, ra: boolean, ad: boolean, cd: boolean, z: number?, rcode: keyof<<typeof>> | number, qdcount: number, ancount: number, nscount: number, arcount: number }
id: number

Exchange identifier

qr: keyof<<typeof>>

Query or response?

opcode: keyof<<typeof>> | number

Kind of query

aa: boolean

(Response only) authoritative answer?

tc: boolean

Truncated?

rd: boolean

Recursion desired

ra: boolean

Recursion available

ad: boolean

Authentic Data. Indicates the response data was authenticated by the resolver.

cd: boolean

Checking Disabled. Requests that DNSSEC signature validation not be performed.

z: number?

Remaining reserved Z bit. Should normally be 0.

rcode: keyof<<typeof>> | number

Response code

qdcount: number

Number of entries in question section

ancount: number

Number of resource records in the answer section

nscount: number

Number of name server resource records in the authority section

arcount: number

Number of resource records in the additional records section

Question

type Question = { name: string, type: keyof<<typeof>> | number, class: keyof<<typeof>> | number }
name: string
type: keyof<<typeof>> | number
class: keyof<<typeof>> | number

EdnsOption

type EdnsOption = { code: keyof<<typeof>> | number, data: buffer }
code: keyof<<typeof>> | number
data: buffer

RDataRaw

type RDataRaw = { kind: "raw", value: buffer }
kind: "raw"
value: buffer

RDataA

type RDataA = { kind: "A", address: ip.IPv4Address }
kind: "A"
address: ip.IPv4Address

RDataAAAA

type RDataAAAA = { kind: "AAAA", address: ip.IPv6Address }
kind: "AAAA"
address: ip.IPv6Address

RDataCNAME

type RDataCNAME = { kind: "CNAME", alias: string }
kind: "CNAME"
alias: string

RDataMX

type RDataMX = { kind: "MX", preference: number, host: string }
kind: "MX"
preference: number
host: string

RDataNS

type RDataNS = { kind: "NS", host: string }
kind: "NS"
host: string

RDataPTR

type RDataPTR = { kind: "PTR", host: string }
kind: "PTR"
host: string

RDataTXT

type RDataTXT = { kind: "TXT", texts: { string } }
kind: "TXT"
texts: { string }

RDataRRSIG

type RDataRRSIG = { kind: "RRSIG", typeCovered: keyof<<typeof>> | number, algorithm: keyof<<typeof>> | number, labels: number, originalTtl: number, signatureExpiration: number, signatureInception: number, keyTag: number, signerName: string, signature: buffer }
kind: "RRSIG"
typeCovered: keyof<<typeof>> | number
algorithm: keyof<<typeof>> | number
labels: number
originalTtl: number
signatureExpiration: number
signatureInception: number
keyTag: number
signerName: string
signature: buffer

RDataDNSKEY

type RDataDNSKEY = { kind: "DNSKEY", flags: number, protocol: keyof<<typeof>> | number, algorithm: keyof<<typeof>> | number, publicKey: buffer }
kind: "DNSKEY"
flags: number
protocol: keyof<<typeof>> | number
algorithm: keyof<<typeof>> | number
publicKey: buffer

RDataDS

type RDataDS = { kind: "DS", keyTag: number, algorithm: keyof<<typeof>> | number, digestType: keyof<<typeof>> | number, digest: buffer }
kind: "DS"
keyTag: number
algorithm: keyof<<typeof>> | number
digestType: keyof<<typeof>> | number
digest: buffer

RDataNSEC

type RDataNSEC = { kind: "NSEC", nextDomain: string, types: { keyof<<typeof>> | number } }
kind: "NSEC"
nextDomain: string
types: { keyof<<typeof>> | number }

RDataNSEC3

type RDataNSEC3 = { kind: "NSEC3", hashAlgorithm: keyof<<typeof>> | number, flags: number, iterations: number, salt: buffer, nextHashedOwnerName: buffer, types: { keyof<<typeof>> | number } }
kind: "NSEC3"
hashAlgorithm: keyof<<typeof>> | number
flags: number
iterations: number
salt: buffer
nextHashedOwnerName: buffer
types: { keyof<<typeof>> | number }

RDataNSEC3PARAM

type RDataNSEC3PARAM = { kind: "NSEC3PARAM", hashAlgorithm: keyof<<typeof>> | number, flags: number, iterations: number, salt: buffer }
kind: "NSEC3PARAM"
hashAlgorithm: keyof<<typeof>> | number
flags: number
iterations: number
salt: buffer

RDataOPT

type RDataOPT = { kind: "OPT", udpPayloadSize: number, extendedRcode: keyof<<typeof>> | number, version: number, dnssecOk: boolean, z: number?, options: { EdnsOption } }
kind: "OPT"
udpPayloadSize: number
extendedRcode: keyof<<typeof>> | number
version: number
dnssecOk: boolean
z: number?
options: { EdnsOption }

RDataSOA

type RDataSOA = { kind: "SOA", mname: string, rname: string, serial: number, refresh: number, retry: number, expire: number, minimum: number }
kind: "SOA"
mname: string
rname: string
serial: number
refresh: number
retry: number
expire: number
minimum: number

RData

Answer

type Answer = { type: string | number, class: string | number, name: string, ttl: number, rdata: RData }
type: string | number
class: string | number
name: string
ttl: number
rdata: RData

Message

type Message = { header: Header, questions: { Question }, answers: { Answer }, authorities: { Answer }, additional: { Answer } }
header: Header
questions: { Question }
answers: { Answer }
authorities: { Answer }
additional: { Answer }

EdnsConfig

type EdnsConfig = { enabled: boolean?, udpPayloadSize: number?, extendedRcode: keyof<<typeof>> | number?, version: number?, dnssecOk: boolean?, z: number?, options: { EdnsOption }? }
enabled: boolean?
udpPayloadSize: number?
extendedRcode: keyof<<typeof>> | number?
version: number?
dnssecOk: boolean?
z: number?
options: { EdnsOption }?