2017-01-21 10:18:10 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
// EXAMPLE:
|
2017-01-21 21:44:37 +00:00
|
|
|
// node bin/dns-parse.js samples/a-0.mdns.bin
|
2017-01-21 10:18:10 +00:00
|
|
|
|
|
|
|
// pass a terminal arg
|
|
|
|
var filename = process.argv[2];
|
|
|
|
if (!filename) {
|
2017-01-21 21:44:37 +00:00
|
|
|
console.error("Usage: node bin/dns-parse.js <path/to/sample.bin>");
|
|
|
|
console.error("Example: node bin/dns-parse.js ./samples/services-0.mdns.bin");
|
2017-01-21 10:18:10 +00:00
|
|
|
process.exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var PromiseA = require('bluebird');
|
|
|
|
var fs = PromiseA.promisifyAll(require('fs'));
|
2017-01-21 22:11:39 +00:00
|
|
|
var pdns = require('../');
|
2017-01-21 10:18:10 +00:00
|
|
|
|
|
|
|
fs.readFileAsync(filename, null).then(function (nb) {
|
2017-01-21 10:32:50 +00:00
|
|
|
//
|
|
|
|
// current reference impl
|
|
|
|
//
|
|
|
|
//console.log(require('native-dns-packet').parse(nb));
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// other reference impl
|
|
|
|
//
|
2017-01-21 21:33:51 +00:00
|
|
|
//console.log(require('dns-js').DNSPacket.parse(nb));
|
2017-01-21 10:32:50 +00:00
|
|
|
|
2017-01-21 10:18:10 +00:00
|
|
|
// nb is a Uint8Array (ArrayBufferView) for nb.buffer
|
|
|
|
// nb.buffer is the actual ArrayBuffer
|
2017-01-21 17:45:45 +00:00
|
|
|
var packet = pdns.unpack(nb.buffer);
|
|
|
|
|
2017-01-21 21:33:51 +00:00
|
|
|
function tryParseRdata(record) {
|
|
|
|
record.data = null;
|
|
|
|
record.error = null;
|
|
|
|
|
|
|
|
try {
|
|
|
|
record.data = pdns.unpackRdata(nb.buffer, packet, record);
|
|
|
|
} catch (e) {
|
2017-01-30 18:21:06 +00:00
|
|
|
console.error('[Error] unpackRdata: ' + e.message);
|
2017-01-21 21:33:51 +00:00
|
|
|
record.error = e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
packet.answers.forEach(tryParseRdata);
|
|
|
|
packet.authority.forEach(tryParseRdata);
|
|
|
|
packet.additional.forEach(tryParseRdata);
|
|
|
|
|
2017-01-21 17:45:45 +00:00
|
|
|
console.log('[packet]', nb.byteLength, 'bytes:');
|
2017-01-21 22:11:39 +00:00
|
|
|
console.log(JSON.stringify(packet, null, 2));
|
2017-01-21 10:18:10 +00:00
|
|
|
});
|