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