Package Exports
- dns-packet
- dns-packet/types
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (dns-packet) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
dns-packet
An abstract-encoding compliant module for encoding / decoding DNS packets. Lifted out of multicast-dns as a separate module.
npm install dns-packet
Usage
var packet = require('dns-packet')
var dgram = require('dgram')
var socket = dgram.createSocket('udp4')
var buf = packet.encode({
type: 'query',
id: 1,
questions: [{
type: 'A',
name: 'google.com'
}]
})
socket.on('message', function (message) {
console.log(packet.decode(message)) // prints out a response from google dns
})
socket.send(buf, 0, buf.length, 53, '8.8.8.8')
API
var buf = packets.encode(packet, [buf], [offset])
Encodes a DNS packet into a buffer.
var packet = packets.decode(buf, [offset])
Decode a DNS packet from a buffer
var len = packets.encodingLength(packet)
Returns how many bytes are needed to encode the DNS packet
Packets
Packets look like this
{
type: 'query|response',
id: optionalIdNumber,
questions: [...],
answers: [...],
additionals: [...],
authorities: [...]
}
A question looks like this
{
type: 'A', // or SRV, AAAA, etc
name: 'google.com' // which record are you looking for
}
And an answers, additional, or authority looks like this
{
type: 'A', // or SRV, AAAA, etc
name: 'google.com', // which name is this record for
ttl: optionalTimeToLiveInSeconds,
(record specific data, see below)
}
Currently the different available records are
A
{
data: 'IPv4 address' // fx 127.0.0.1
}
AAAA
{
data: 'IPv6 address' // fx fe80::1
}
TXT
{
data: Buffer('some text')
}
NULL
{
data: Buffer('any binary data')
}
SRV
{
data: {
port: servicePort,
target: serviceHostName,
priority: optionalServicePriority,
weight: optionalServiceWeight
}
}
HINFO
{
data: {
cpu: 'cpu info',
os: 'os info'
}
}
PTR
{
data: 'points.to.another.record'
}
CNAME
{
data: 'cname.to.another.record'
}
DNAME
{
data: 'dname.to.another.record'
}
If you need another one, open an issue and we'll try to add it.
License
MIT