mDNS howto Documentation ===== How to create a JSON file with information about your project: ```bash npm init ``` How to duplicate DNS crash: ``` >> cd ~/dns_test >> node listen.jss ``` Then in another terminal enter: ``` >> dig @224.0.0.251 -p 5353 -t PTR _cloud._tcp.local ``` The listener then crashes with an output of: ``` START DNS PACKET /home/daplie/dns_test/node_modules/dns-js/lib/bufferconsumer.js:52 throw new Error('Buffer overflow') ^ Error: Buffer overflow at BufferConsumer.slice (/home/daplie/dns_test/node_modules/dns-js/lib/bufferconsumer.js:52:13) s at Function.DNSRecord.parse (/home/daplie/dns_test/node_modules/dns-js/lib/dnsrecord.js:237:46) at /home/daplie/dns_test/node_modules/dns-js/lib/dnspacket.js:164:30 at Array.forEach (native) at Function.DNSPacket.parse (/home/daplie/dns_test/node_modules/dns-js/lib/dnspacket.js:159:17) at /home/daplie/dns_test/cloud-respond.js:86:31 at Array.forEach (native) at /home/daplie/dns_test/cloud-respond.js:11:21 at Array.forEach (native) at Object.module.exports.respond (/home/daplie/dns_test/cloud-respond.js:10:11) ``` After commenting out lines 45-53 in dns_test/node_modules/dns-js/lib/bufferconsumer.js and rerunning the previous commands, the result is a new error: ``` START DNS PACKET buffer.js:829 throw new RangeError('Index out of range'); ^ RangeError: Index out of range at checkOffset (buffer.js:829:11) at Buffer.readUInt8 (buffer.js:867:5) at BufferConsumer.byte (/home/daplie/dns_test/node_modules/dns-js/lib/bufferconsumer.js:67:22) at BufferConsumer.name (/home/daplie/dns_test/node_modules/dns-js/lib/bufferconsumer.js:120:14) at Function.DNSRecord.parse (/home/daplie/dns_test/node_modules/dns-js/lib/dnsrecord.js:187:14) at /home/daplie/dns_test/node_modules/dns-js/lib/dnspacket.js:164:30 at Array.forEach (native) at Function.DNSPacket.parse (/home/daplie/dns_test/node_modules/dns-js/lib/dnspacket.js:159:17) at /home/daplie/dns_test/cloud-respond.js:86:31 at Array.forEach (native) ``` which is located in the node.js buffer module. The API is [here](https://nodejs.org/api/buffer.html). However, the error we are working with will most likely be dealt with by parsing through the binary and putting it in a format that is acceptable to a custom buffer, since the current buffer.js does doesn't seem to do the trick. Using ```javascript function pad(str, len, ch) { while (str.length < len) { str = ch + str; } return str; } ``` the binary output comes out as: ``` 11100001 10001000 00000001 00100000 00000000 00000001 00000000 00000000 00000000 00000000 00000000 00000001 00000110 01011111 01100011 01101100 01101111 01110101 01100100 00000100 01011111 01110100 01100011 01110000 00000101 01101100 01101111 01100011 01100001 01101100 00000000 00000000 00001100 00000000 00000001 00000000 00000000 00101001 00010000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ``` What are the possible problems? How to print out hex values of the DNS message in node.js? ```javascript socket.on('message', function (message, rinfo) { console.log('Received %d bytes from %s:%d\n', message.length, rinfo.address, rinfo.port); //console.log(msg.toString('utf8')); console.log(message.toString('hex')); ``` ###Objective