send query, receive response
This commit is contained in:
parent
8049744f5f
commit
26816ee0b1
161
bin/dig.js
161
bin/dig.js
|
@ -52,6 +52,108 @@ function hexdump(ab) {
|
|||
return head + '\n' + str + '\n' + trail;
|
||||
}
|
||||
|
||||
function request(query, opts) {
|
||||
var queryAb = dnsjs.DNSPacket.write(query);
|
||||
|
||||
if (opts.debug) {
|
||||
console.log('');
|
||||
console.log('DNS Question:');
|
||||
console.log('');
|
||||
console.log(query);
|
||||
console.log('');
|
||||
console.log(hexdump(queryAb));
|
||||
console.log('');
|
||||
console.log(dnsjs.DNSPacket.parse(queryAb));
|
||||
console.log('');
|
||||
}
|
||||
|
||||
var count = 0;
|
||||
var handlers = {};
|
||||
var server = dgram.createSocket({
|
||||
type: 'udp4'
|
||||
, reuseAddr: true
|
||||
});
|
||||
|
||||
handlers.onError = function (err) {
|
||||
console.error("error:", err.stack);
|
||||
server.close();
|
||||
};
|
||||
handlers.onMessage = function (nb) {
|
||||
var packet = dnsjs.DNSPacket.parse(nb.buffer.slice(nb.byteOffset, nb.byteOffset + nb.byteLength));
|
||||
|
||||
if (packet.id !== query.id) {
|
||||
console.log('ignoring packet for ', packet.question[0].name);
|
||||
}
|
||||
|
||||
if (!opts.mdns) {
|
||||
server.close();
|
||||
}
|
||||
|
||||
console.log('');
|
||||
console.log('DNS Response:');
|
||||
console.log(packet);
|
||||
|
||||
if (opts.output) {
|
||||
var path = require('path');
|
||||
var filename = packet.question[0].typeName + '-' + count + '.bin';
|
||||
var fullpath = path.join('samples', filename);
|
||||
|
||||
count += 1;
|
||||
|
||||
return fs.writeFileAsync(fullpath, nb).then(function () {
|
||||
console.log('wrote ' + nb.length + ' bytes to ' + fullpath);
|
||||
});
|
||||
}
|
||||
};
|
||||
handlers.onListening = function () {
|
||||
/*jshint validthis:true*/
|
||||
var server = this;
|
||||
var nameserver = opts.nameserver;
|
||||
var nameservers;
|
||||
var index;
|
||||
|
||||
if (!nameserver) {
|
||||
nameservers = require('dns').getServers();
|
||||
index = (Math.round(Math.random() * 7777)) % nameservers.length;
|
||||
nameserver = nameservers[index];
|
||||
if (opts.debug) {
|
||||
console.log(index, nameservers);
|
||||
}
|
||||
}
|
||||
|
||||
if (opts.mdns || '224.0.0.251' === opts.nameserver) {
|
||||
server.setBroadcast(true);
|
||||
server.addMembership(opts.nameserver);
|
||||
}
|
||||
|
||||
if (opts.debug) {
|
||||
console.log('');
|
||||
console.log('Bound and Listening:');
|
||||
console.log(server.address());
|
||||
}
|
||||
|
||||
if (opts.debug) {
|
||||
console.log('querying ' + nameserver + ':' + opts.port);
|
||||
}
|
||||
server.send(Buffer.from(queryAb), opts.port, nameserver, function () {
|
||||
if (opts.debug) {
|
||||
console.log('');
|
||||
console.log('request sent');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
server.on('error', handlers.onError);
|
||||
server.on('message', handlers.onMessage);
|
||||
server.on('listening', handlers.onListening);
|
||||
|
||||
// 0 dns request
|
||||
// 53 dns server
|
||||
// 5353 mdns
|
||||
server.bind(0);
|
||||
}
|
||||
|
||||
cli.main(function (args, cli) {
|
||||
args.forEach(function (arg) {
|
||||
if (-1 !== commonTypes.indexOf(arg.toUpperCase())) {
|
||||
|
@ -88,6 +190,9 @@ cli.main(function (args, cli) {
|
|||
if (!cli.port) {
|
||||
cli.port = cli.p = 5353;
|
||||
}
|
||||
if (!cli.nameserver) {
|
||||
cli.nameserver = '224.0.0.251';
|
||||
}
|
||||
}
|
||||
|
||||
if (!cli.type) {
|
||||
|
@ -128,60 +233,6 @@ cli.main(function (args, cli) {
|
|||
}
|
||||
]
|
||||
};
|
||||
var queryAb = dnsjs.DNSPacket.write(query);
|
||||
|
||||
if (cli.debug) {
|
||||
console.log('');
|
||||
console.log('DNS Question:');
|
||||
console.log('');
|
||||
console.log(query);
|
||||
console.log('');
|
||||
console.log(hexdump(queryAb));
|
||||
console.log('');
|
||||
console.log(dnsjs.DNSPacket.parse(queryAb));
|
||||
console.log('');
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
process.exit(1);
|
||||
var server = dgram.createSocket({
|
||||
type: 'udp4'
|
||||
, reuseAddr: true
|
||||
});
|
||||
|
||||
var handlers = {};
|
||||
handlers.onError = function (err) {
|
||||
console.error("error:", err.stack);
|
||||
server.close();
|
||||
};
|
||||
handlers.onMessage = function (buffer) {
|
||||
var path = require('path');
|
||||
var filename = type + '-' + count + '.mdns.bin';
|
||||
var fullpath = path.join('samples', filename);
|
||||
|
||||
count += 1;
|
||||
|
||||
fs.writeFileAsync(fullpath, buffer).then(function () {
|
||||
console.log('wrote ' + buffer.length + ' bytes to ' + fullpath);
|
||||
});
|
||||
};
|
||||
handlers.onListening = function () {
|
||||
/*jshint validthis:true*/
|
||||
var server = this;
|
||||
console.log(server.address());
|
||||
|
||||
server.setBroadcast(true);
|
||||
server.addMembership('224.0.0.251');
|
||||
};
|
||||
|
||||
|
||||
server.on('error', handlers.onError);
|
||||
server.on('message', handlers.onMessage);
|
||||
server.on('listening', handlers.onListening);
|
||||
|
||||
// 53 dns
|
||||
// 5353 mdns
|
||||
server.bind(5353);
|
||||
request(query, cli);
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue