148 lines
3.3 KiB
Markdown
148 lines
3.3 KiB
Markdown
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
|