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
 | 
					--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
 | 
					-c <class>                  default IN
 | 
				
			||||||
-p <port>                   default 53 (mdns default: 5353) (listener is random for DNS and 5353 for mDNS)
 | 
					-p <port>                   default 53 (mdns default: 5353) (listener is random for DNS and 5353 for mDNS)
 | 
				
			||||||
-q <query> (superfluous)    required (ex: daplie.com)
 | 
					-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 dig = require('../dns-request');
 | 
				
			||||||
var cli = require('cli');
 | 
					var cli = require('cli');
 | 
				
			||||||
var defaultNameservers = require('dns').getServers();
 | 
					var defaultNameservers = require('dns').getServers();
 | 
				
			||||||
 | 
					var typeRe = /^type\d+$/i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cli.parse({
 | 
					cli.parse({
 | 
				
			||||||
//  'b': [ false, 'set source IP address (defaults to 0.0.0.0)', 'string' ]
 | 
					//  '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) {
 | 
					cli.main(function (args, cli) {
 | 
				
			||||||
  args.forEach(function (arg) {
 | 
					  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) {
 | 
					      if (cli.type) {
 | 
				
			||||||
        console.error("'type' was specified more than once");
 | 
					        console.error("'type' was specified more than once");
 | 
				
			||||||
        process.exit(1);
 | 
					        process.exit(1);
 | 
				
			||||||
@ -128,6 +129,9 @@ cli.main(function (args, cli) {
 | 
				
			|||||||
  if (!cli.type) {
 | 
					  if (!cli.type) {
 | 
				
			||||||
    cli.type = cli.t = 'ANY';
 | 
					    cli.type = cli.t = 'ANY';
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  if (typeRe.test(cli.type)) {
 | 
				
			||||||
 | 
					    cli.rawType = parseInt(cli.type.replace('type', ''), 10);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  if (!cli.port) {
 | 
					  if (!cli.port) {
 | 
				
			||||||
    cli.port = cli.p = 53;
 | 
					    cli.port = cli.p = 53;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -158,7 +162,8 @@ cli.main(function (args, cli) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  , question: [
 | 
					  , question: [
 | 
				
			||||||
      { name: cli.casedQuery
 | 
					      { name: cli.casedQuery
 | 
				
			||||||
      , typeName: cli.type
 | 
					      , type: cli.rawType
 | 
				
			||||||
 | 
					      , typeName: cli.rawType ? undefined : cli.type
 | 
				
			||||||
      , className: cli.class
 | 
					      , className: cli.class
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
@ -220,7 +225,7 @@ cli.main(function (args, cli) {
 | 
				
			|||||||
          if (-1 !== i) {
 | 
					          if (-1 !== i) {
 | 
				
			||||||
            // "EXamPLE.cOm".replace("wWw.EXamPLE.cOm".substr(4), "www.example.com".substr(4))
 | 
					            // "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));
 | 
					            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")
 | 
					            // "www.example.com".replace("EXamPLE.cOm", "example.com")
 | 
				
			||||||
            a.name = a.name.substr(0, j) + a.name.substr(j).replace(cli.casedQuery, cli.query);
 | 
					            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
 | 
					          // 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)
 | 
					          // (but I don't think it should need to)
 | 
				
			||||||
          if (a.name.length !== an.length) {
 | 
					          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' ]
 | 
					  types: [ 'A', 'AAAA', 'CNAME', 'MX', 'NS', 'PTR', 'SOA', 'SRV', 'TXT' ]
 | 
				
			||||||
, printers: {
 | 
					, printers: {
 | 
				
			||||||
    'ANY': function (q) {
 | 
					    '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) {
 | 
					  , 'A': function (q) {
 | 
				
			||||||
@ -43,8 +43,10 @@ module.exports = {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
, writeQuery: function (opts, query, queryAb) {
 | 
					, writeQuery: function (opts, query, queryAb) {
 | 
				
			||||||
    var path = require('path');
 | 
					    var path = require('path');
 | 
				
			||||||
    var binname = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.query.bin';
 | 
					    var basename = query.question[0].name + '.'
 | 
				
			||||||
    var jsonname = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.query.json';
 | 
					      + (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 binpath = opts.output + '.' + binname;
 | 
				
			||||||
    var jsonpath = opts.output + '.' + jsonname;
 | 
					    var jsonpath = opts.output + '.' + jsonname;
 | 
				
			||||||
    var json = JSON.stringify(query, null, 2);
 | 
					    var json = JSON.stringify(query, null, 2);
 | 
				
			||||||
@ -64,8 +66,10 @@ module.exports = {
 | 
				
			|||||||
    var me = this;
 | 
					    var me = this;
 | 
				
			||||||
    me._count = me._count || 0;
 | 
					    me._count = me._count || 0;
 | 
				
			||||||
    var path = require('path');
 | 
					    var path = require('path');
 | 
				
			||||||
    var binname = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.' + me._count + '.bin';
 | 
					    var basename = query.question[0].name + '.'
 | 
				
			||||||
    var jsonname = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.' + me._count + '.json';
 | 
					      + (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 binpath = opts.output + '.' + binname;
 | 
				
			||||||
    var jsonpath = opts.output + '.' + jsonname;
 | 
					    var jsonpath = opts.output + '.' + jsonname;
 | 
				
			||||||
    var json = JSON.stringify(packet, null, 2);
 | 
					    var json = JSON.stringify(packet, null, 2);
 | 
				
			||||||
 | 
				
			|||||||
@ -25,7 +25,7 @@ function logQuestion(packet) {
 | 
				
			|||||||
  console.info('');
 | 
					  console.info('');
 | 
				
			||||||
  console.info(';; QUESTION SECTION:');
 | 
					  console.info(';; QUESTION SECTION:');
 | 
				
			||||||
  packet.question.forEach(function (q) {
 | 
					  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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user