forked from mirrors/gecko-dev
		
	These modules are MIT licensed and they're to be used in xpcshell-tests for TRR. They allow us to make moz-http2.js act like a true DoH server - more specifically to answer DNS queries that have actually been asked, not just a dumb character buffer. Differential Revision: https://phabricator.services.mozilla.com/D25672 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			52 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict'
 | 
						|
 | 
						|
const dnsPacket = require('..')
 | 
						|
const net = require('net')
 | 
						|
 | 
						|
var response = null
 | 
						|
var expectedLength = 0
 | 
						|
 | 
						|
function getRandomInt (min, max) {
 | 
						|
  return Math.floor(Math.random() * (max - min + 1)) + min
 | 
						|
}
 | 
						|
 | 
						|
const buf = dnsPacket.streamEncode({
 | 
						|
  type: 'query',
 | 
						|
  id: getRandomInt(1, 65534),
 | 
						|
  flags: dnsPacket.RECURSION_DESIRED,
 | 
						|
  questions: [{
 | 
						|
    type: 'A',
 | 
						|
    name: 'google.com'
 | 
						|
  }]
 | 
						|
})
 | 
						|
 | 
						|
const client = new net.Socket()
 | 
						|
client.connect(53, '8.8.8.8', function () {
 | 
						|
  console.log('Connected')
 | 
						|
  client.write(buf)
 | 
						|
})
 | 
						|
 | 
						|
client.on('data', function (data) {
 | 
						|
  console.log('Received response: %d bytes', data.byteLength)
 | 
						|
  if (response == null) {
 | 
						|
    if (data.byteLength > 1) {
 | 
						|
      const plen = data.readUInt16BE(0)
 | 
						|
      expectedLength = plen
 | 
						|
      if (plen < 12) {
 | 
						|
        throw new Error('below DNS minimum packet length')
 | 
						|
      }
 | 
						|
      response = Buffer.from(data)
 | 
						|
    }
 | 
						|
  } else {
 | 
						|
    response = Buffer.concat([response, data])
 | 
						|
  }
 | 
						|
 | 
						|
  if (response.byteLength >= expectedLength) {
 | 
						|
    console.log(dnsPacket.streamDecode(response))
 | 
						|
    client.destroy()
 | 
						|
  }
 | 
						|
})
 | 
						|
 | 
						|
client.on('close', function () {
 | 
						|
  console.log('Connection closed')
 | 
						|
})
 |