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;
 | 
					  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) {
 | 
					cli.main(function (args, cli) {
 | 
				
			||||||
  args.forEach(function (arg) {
 | 
					  args.forEach(function (arg) {
 | 
				
			||||||
    if (-1 !== commonTypes.indexOf(arg.toUpperCase())) {
 | 
					    if (-1 !== commonTypes.indexOf(arg.toUpperCase())) {
 | 
				
			||||||
@ -88,6 +190,9 @@ cli.main(function (args, cli) {
 | 
				
			|||||||
    if (!cli.port) {
 | 
					    if (!cli.port) {
 | 
				
			||||||
      cli.port = cli.p = 5353;
 | 
					      cli.port = cli.p = 5353;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    if (!cli.nameserver) {
 | 
				
			||||||
 | 
					      cli.nameserver = '224.0.0.251';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!cli.type) {
 | 
					  if (!cli.type) {
 | 
				
			||||||
@ -128,60 +233,6 @@ cli.main(function (args, cli) {
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  var queryAb = dnsjs.DNSPacket.write(query);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (cli.debug) {
 | 
					  request(query, cli);
 | 
				
			||||||
    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);
 | 
					 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user