summaryrefslogtreecommitdiffstats
path: root/testing/xpcshell/dns-packet/examples
diff options
context:
space:
mode:
Diffstat (limited to 'testing/xpcshell/dns-packet/examples')
-rw-r--r--testing/xpcshell/dns-packet/examples/doh.js52
-rw-r--r--testing/xpcshell/dns-packet/examples/tcp.js52
-rw-r--r--testing/xpcshell/dns-packet/examples/tls.js61
-rw-r--r--testing/xpcshell/dns-packet/examples/udp.js28
4 files changed, 193 insertions, 0 deletions
diff --git a/testing/xpcshell/dns-packet/examples/doh.js b/testing/xpcshell/dns-packet/examples/doh.js
new file mode 100644
index 0000000000..37ef19fc35
--- /dev/null
+++ b/testing/xpcshell/dns-packet/examples/doh.js
@@ -0,0 +1,52 @@
+
+'use strict'
+
+/*
+ * Sample code to make DNS over HTTPS request using POST
+ * AUTHOR: Tom Pusateri <pusateri@bangj.com>
+ * DATE: March 17, 2018
+ * LICENSE: MIT
+ */
+
+const dnsPacket = require('..')
+const https = require('https')
+
+function getRandomInt (min, max) {
+ return Math.floor(Math.random() * (max - min + 1)) + min
+}
+
+const buf = dnsPacket.encode({
+ type: 'query',
+ id: getRandomInt(1, 65534),
+ flags: dnsPacket.RECURSION_DESIRED,
+ questions: [{
+ type: 'A',
+ name: 'google.com'
+ }]
+})
+
+const options = {
+ hostname: 'dns.google.com',
+ port: 443,
+ path: '/experimental',
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/dns-udpwireformat',
+ 'Content-Length': Buffer.byteLength(buf)
+ }
+}
+
+const request = https.request(options, (response) => {
+ console.log('statusCode:', response.statusCode)
+ console.log('headers:', response.headers)
+
+ response.on('data', (d) => {
+ console.log(dnsPacket.decode(d))
+ })
+})
+
+request.on('error', (e) => {
+ console.error(e)
+})
+request.write(buf)
+request.end()
diff --git a/testing/xpcshell/dns-packet/examples/tcp.js b/testing/xpcshell/dns-packet/examples/tcp.js
new file mode 100644
index 0000000000..b25c2c41cb
--- /dev/null
+++ b/testing/xpcshell/dns-packet/examples/tcp.js
@@ -0,0 +1,52 @@
+'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')
+})
diff --git a/testing/xpcshell/dns-packet/examples/tls.js b/testing/xpcshell/dns-packet/examples/tls.js
new file mode 100644
index 0000000000..694a4fecfa
--- /dev/null
+++ b/testing/xpcshell/dns-packet/examples/tls.js
@@ -0,0 +1,61 @@
+'use strict'
+
+const tls = require('tls')
+const dnsPacket = require('..')
+
+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 context = tls.createSecureContext({
+ secureProtocol: 'TLSv1_2_method'
+})
+
+const options = {
+ port: 853,
+ host: 'getdnsapi.net',
+ secureContext: context
+}
+
+const client = tls.connect(options, () => {
+ console.log('client 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('end', () => {
+ console.log('Connection ended')
+})
diff --git a/testing/xpcshell/dns-packet/examples/udp.js b/testing/xpcshell/dns-packet/examples/udp.js
new file mode 100644
index 0000000000..0f9df9d794
--- /dev/null
+++ b/testing/xpcshell/dns-packet/examples/udp.js
@@ -0,0 +1,28 @@
+'use strict'
+
+const dnsPacket = require('..')
+const dgram = require('dgram')
+
+const socket = dgram.createSocket('udp4')
+
+function getRandomInt (min, max) {
+ return Math.floor(Math.random() * (max - min + 1)) + min
+}
+
+const buf = dnsPacket.encode({
+ type: 'query',
+ id: getRandomInt(1, 65534),
+ flags: dnsPacket.RECURSION_DESIRED,
+ questions: [{
+ type: 'A',
+ name: 'google.com'
+ }]
+})
+
+socket.on('message', function (message, rinfo) {
+ console.log(rinfo)
+ console.log(dnsPacket.decode(message)) // prints out a response from google dns
+ socket.close()
+})
+
+socket.send(buf, 0, buf.length, 53, '8.8.8.8')