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, flags:packet.RECURSION_DESIRED, 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
To use more than one flag bitwise-or them together
var flags =packet.RECURSION_DESIRED|packet.RECURSION_AVAILABLE
And to check for a flag use bitwise-and
var isRecursive =message.flags &packet.RECURSION_DESIRED
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)}