122 lines
2.5 KiB
JavaScript
122 lines
2.5 KiB
JavaScript
var dns = require('../dns'),
|
|
util = require('util');
|
|
|
|
var question = dns.Question({
|
|
name: 'www.google.com',
|
|
type: dns.consts.NAME_TO_QTYPE.A,
|
|
});
|
|
|
|
var start = new Date().getTime();
|
|
|
|
var req = dns.Request({
|
|
question: question,
|
|
server: { address: '8.8.8.8', port: 53, type: 'udp' },
|
|
timeout: 1000,
|
|
});
|
|
|
|
req.on('timeout', function () {
|
|
console.log('Timeout in making request');
|
|
});
|
|
|
|
req.on('message', function (err, answer) {
|
|
console.log(toDig.call(answer));
|
|
});
|
|
|
|
req.on('end', function () {
|
|
var delta = (new Date().getTime()) - start;
|
|
console.log('Finished processing request: ' + delta.toString() + 'ms');
|
|
});
|
|
|
|
req.send();
|
|
|
|
toDig = function() {
|
|
var ret = [], tmp, flags = [];
|
|
|
|
tmp = ';; ->>HEADER<<- opcode: ';
|
|
switch (this.header.opcode) {
|
|
case 0:
|
|
tmp += 'QUERY';
|
|
break;
|
|
case 1:
|
|
tmp += 'IQUERY';
|
|
break;
|
|
case 2:
|
|
tmp += 'STATUS';
|
|
break;
|
|
default:
|
|
tmp += 'UNKNOWN';
|
|
break;
|
|
}
|
|
tmp += ', status: ' + dns.consts.RCODE_TO_NAME[this.header.rcode];
|
|
tmp += ', id: ' + this.header.id;
|
|
ret.push(tmp);
|
|
|
|
tmp = ';; flags: ';
|
|
|
|
if (this.header.qr)
|
|
flags.push('qr');
|
|
if (this.header.rd)
|
|
flags.push('rd');
|
|
if (this.header.aa)
|
|
flags.push('aa');
|
|
if (this.header.tc)
|
|
flags.push('tc');
|
|
if (this.header.ra)
|
|
flags.push('ra');
|
|
|
|
tmp += flags.join(' ') + ';';
|
|
|
|
tmp += ' QUESTON: ' + this.question.length;
|
|
tmp += ', ANSWER: ' + this.answer.length;
|
|
tmp += ', AUTHORITY: ' + this.authority.length;
|
|
tmp += ', ADDITIONAL: ' + this.additional.length;
|
|
|
|
ret.push(tmp);
|
|
ret.push('');
|
|
|
|
var pushit = function(p) {
|
|
ret.push([
|
|
p.name,
|
|
dns.consts.QCLASS_TO_NAME[p.class],
|
|
dns.consts.QTYPE_TO_NAME[p.type],
|
|
p.address || p.data || '',
|
|
].join('\t'));
|
|
};
|
|
|
|
if (this.question.length) {
|
|
ret.push(';; QUESTION SECTION:');
|
|
this.question.forEach(function(q) {
|
|
ret.push('; ' + [q.name,
|
|
dns.consts.QCLASS_TO_NAME[q.class],
|
|
dns.consts.QTYPE_TO_NAME[q.type]
|
|
].join('\t'));
|
|
});
|
|
ret.push('');
|
|
}
|
|
|
|
if (this.answer.length) {
|
|
ret.push(';; ANSWER SECTION:');
|
|
this.answer.forEach(pushit);
|
|
ret.push('');
|
|
}
|
|
|
|
if (this.authority.length) {
|
|
ret.push(';; AUTHORITY SECTION:');
|
|
this.authority.forEach(pushit);
|
|
ret.push('');
|
|
}
|
|
|
|
if (this.additional.length) {
|
|
if (this.additional[0].type !== dns.consts.NAME_TO_QTYPE.OPT) {
|
|
ret.push(';; ADDITIONAL SECTION:');
|
|
this.additional.forEach(pushit);
|
|
ret.push('');
|
|
}
|
|
}
|
|
|
|
ret.push(';; END');
|
|
|
|
return ret.join('\n');
|
|
};
|
|
|