add type<num> support, fix recasing bug
This commit is contained in:
parent
b3d7408db4
commit
b6bc592e56
|
@ -73,7 +73,7 @@ Options
|
|||
|
||||
--mdns Use mDNS port and nameserver address, and listen for multiple packets
|
||||
|
||||
-t <type> (superfluous) default ANY (mdns default: PTR)
|
||||
-t <type> (superfluous) A, CNAME, MX, etc. Also supports -t type<decimal> for "unsupported" types. default ANY (mdns default: PTR)
|
||||
-c <class> default IN
|
||||
-p <port> default 53 (mdns default: 5353) (listener is random for DNS and 5353 for mDNS)
|
||||
-q <query> (superfluous) required (ex: daplie.com)
|
||||
|
|
14
bin/dig.js
14
bin/dig.js
|
@ -4,6 +4,7 @@
|
|||
var dig = require('../dns-request');
|
||||
var cli = require('cli');
|
||||
var defaultNameservers = require('dns').getServers();
|
||||
var typeRe = /^type\d+$/i;
|
||||
|
||||
cli.parse({
|
||||
// 'b': [ false, 'set source IP address (defaults to 0.0.0.0)', 'string' ]
|
||||
|
@ -30,7 +31,7 @@ var common = require('../common.js');
|
|||
|
||||
cli.main(function (args, cli) {
|
||||
args.forEach(function (arg) {
|
||||
if (-1 !== common.types.concat([ 'ANY' ]).indexOf(arg.toUpperCase())) {
|
||||
if (typeRe.test(arg) || -1 !== common.types.concat([ 'ANY' ]).indexOf(arg.toUpperCase())) {
|
||||
if (cli.type) {
|
||||
console.error("'type' was specified more than once");
|
||||
process.exit(1);
|
||||
|
@ -128,6 +129,9 @@ cli.main(function (args, cli) {
|
|||
if (!cli.type) {
|
||||
cli.type = cli.t = 'ANY';
|
||||
}
|
||||
if (typeRe.test(cli.type)) {
|
||||
cli.rawType = parseInt(cli.type.replace('type', ''), 10);
|
||||
}
|
||||
if (!cli.port) {
|
||||
cli.port = cli.p = 53;
|
||||
}
|
||||
|
@ -158,7 +162,8 @@ cli.main(function (args, cli) {
|
|||
}
|
||||
, question: [
|
||||
{ name: cli.casedQuery
|
||||
, typeName: cli.type
|
||||
, type: cli.rawType
|
||||
, typeName: cli.rawType ? undefined : cli.type
|
||||
, className: cli.class
|
||||
}
|
||||
]
|
||||
|
@ -220,7 +225,7 @@ cli.main(function (args, cli) {
|
|||
if (-1 !== i) {
|
||||
// "EXamPLE.cOm".replace("wWw.EXamPLE.cOm".substr(4), "www.example.com".substr(4))
|
||||
a.name = a.name.replace(cli.casedQuery.substr(i), cli.query.substr(i));
|
||||
} else {
|
||||
} else if (-1 !== j) {
|
||||
// "www.example.com".replace("EXamPLE.cOm", "example.com")
|
||||
a.name = a.name.substr(0, j) + a.name.substr(j).replace(cli.casedQuery, cli.query);
|
||||
}
|
||||
|
@ -229,7 +234,8 @@ cli.main(function (args, cli) {
|
|||
// it does not handle the case of a record for example.com.uk being returned in response to a query for www.example.com correctly
|
||||
// (but I don't think it should need to)
|
||||
if (a.name.length !== an.length) {
|
||||
console.error("[ERROR] '" + an + "' != '" + a.length + "'");
|
||||
console.error("[ERROR] question / answer mismatch: '" + an + "' != '" + a.length + "'");
|
||||
console.error(a);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
14
common.js
14
common.js
|
@ -6,7 +6,7 @@ module.exports = {
|
|||
types: [ 'A', 'AAAA', 'CNAME', 'MX', 'NS', 'PTR', 'SOA', 'SRV', 'TXT' ]
|
||||
, printers: {
|
||||
'ANY': function (q) {
|
||||
console.log(';' + q.name + '.', q.ttl, q.className, q.typeName, q.data || q.rdata || 'unknown record type');
|
||||
console.log(';' + q.name + '.', q.ttl, (q.className || q.class), (q.typeName || ('type' + q.type)), q.data || q.rdata || 'unknown record type');
|
||||
}
|
||||
|
||||
, 'A': function (q) {
|
||||
|
@ -43,8 +43,10 @@ module.exports = {
|
|||
}
|
||||
, writeQuery: function (opts, query, queryAb) {
|
||||
var path = require('path');
|
||||
var binname = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.query.bin';
|
||||
var jsonname = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.query.json';
|
||||
var basename = query.question[0].name + '.'
|
||||
+ (query.question[0].typeName||query.question[0].type.toString()).toLowerCase();
|
||||
var binname = basename + '.query.bin';
|
||||
var jsonname = basename + '.query.json';
|
||||
var binpath = opts.output + '.' + binname;
|
||||
var jsonpath = opts.output + '.' + jsonname;
|
||||
var json = JSON.stringify(query, null, 2);
|
||||
|
@ -64,8 +66,10 @@ module.exports = {
|
|||
var me = this;
|
||||
me._count = me._count || 0;
|
||||
var path = require('path');
|
||||
var binname = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.' + me._count + '.bin';
|
||||
var jsonname = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.' + me._count + '.json';
|
||||
var basename = query.question[0].name + '.'
|
||||
+ (query.question[0].typeName||query.question[0].type.toString()).toLowerCase();
|
||||
var binname = basename + '.' + me._count + '.bin';
|
||||
var jsonname = basename + '.' + me._count + '.json';
|
||||
var binpath = opts.output + '.' + binname;
|
||||
var jsonpath = opts.output + '.' + jsonname;
|
||||
var json = JSON.stringify(packet, null, 2);
|
||||
|
|
|
@ -25,7 +25,7 @@ function logQuestion(packet) {
|
|||
console.info('');
|
||||
console.info(';; QUESTION SECTION:');
|
||||
packet.question.forEach(function (q) {
|
||||
console.info(';' + q.name + '.', ' ', q.className, q.typeName);
|
||||
console.info(';' + q.name + '.', ' ', q.className, q.typeName || ('type' + q.type));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue