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');
 | |
| };
 | |
| 
 |