dns2 2.0.0 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc +16 -0
- package/.github/FUNDING.yml +12 -12
- package/.github/workflows/lint.js.yml +17 -0
- package/.github/workflows/node.js.yml +29 -30
- package/LICENSE +18 -18
- package/README.md +227 -196
- package/SECURITY.md +21 -21
- package/client/doh.js +50 -42
- package/client/google.js +27 -27
- package/client/tcp.js +34 -34
- package/client/udp.js +39 -39
- package/example/client/doh.js +12 -12
- package/example/client/google.js +7 -8
- package/example/client/tcp-custom-dns.js +10 -10
- package/example/client/tcp.js +12 -12
- package/example/client/udp-custom-dns.js +11 -11
- package/example/client/udp-default.js +8 -8
- package/example/client/udp-subnet.js +11 -11
- package/example/client/udp.js +8 -8
- package/example/server/dns.js +46 -0
- package/example/server/doh.js +30 -28
- package/example/server/secret.key +28 -28
- package/example/server/server.crt +22 -22
- package/example/server/tcp.js +19 -19
- package/example/server/udp.js +23 -23
- package/index.js +97 -89
- package/lib/reader.js +53 -55
- package/lib/writer.js +42 -42
- package/package.json +42 -34
- package/packet.js +873 -857
- package/server/dns.js +94 -0
- package/server/doh.js +146 -143
- package/server/index.js +31 -24
- package/server/tcp.js +34 -26
- package/server/udp.js +47 -41
- package/test/index.js +395 -244
- package/test/test.js +34 -27
- package/.travis.yml +0 -4
package/client/doh.js
CHANGED
|
@@ -1,42 +1,50 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
.on('
|
|
17
|
-
.on('
|
|
18
|
-
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
* @
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
packet
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
1
|
+
const Packet = require('../packet');
|
|
2
|
+
|
|
3
|
+
const defaultGet = url => new Promise((resolve, reject) => {
|
|
4
|
+
const headers = {
|
|
5
|
+
accept: 'application/dns-message',
|
|
6
|
+
};
|
|
7
|
+
const base = url.startsWith('https') ? require('https') : require('http');
|
|
8
|
+
const req = base.get(url, { headers }, resolve);
|
|
9
|
+
req.on('error', reject);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
const readStream = stream => {
|
|
13
|
+
const buffer = [];
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
stream
|
|
16
|
+
.on('error', reject)
|
|
17
|
+
.on('data', chunk => buffer.push(chunk))
|
|
18
|
+
.on('end', () => resolve(Buffer.concat(buffer)));
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @docs https://tools.ietf.org/html/rfc8484
|
|
24
|
+
* @param {*} param0
|
|
25
|
+
*/
|
|
26
|
+
const DOHClient = ({ dns, http, get = defaultGet } = {}) => {
|
|
27
|
+
return (name, type = 'A', cls = Packet.CLASS.IN, { clientIp, recursive = true } = {}) => {
|
|
28
|
+
const packet = new Packet();
|
|
29
|
+
// see https://github.com/song940/node-dns/issues/29
|
|
30
|
+
if (recursive) {
|
|
31
|
+
packet.header.rd = 1;
|
|
32
|
+
}
|
|
33
|
+
if (clientIp) {
|
|
34
|
+
packet.additionals.push(Packet.Resource.EDNS([
|
|
35
|
+
Packet.Resource.EDNS.ECS(clientIp),
|
|
36
|
+
]));
|
|
37
|
+
}
|
|
38
|
+
packet.questions.push({
|
|
39
|
+
name,
|
|
40
|
+
class : cls,
|
|
41
|
+
type : Packet.TYPE[type],
|
|
42
|
+
});
|
|
43
|
+
const query = packet.toBase64URL();
|
|
44
|
+
return Promise.resolve(get(`http${http ? '' : 's'}://${dns}/dns-query?dns=${query}`))
|
|
45
|
+
.then(readStream)
|
|
46
|
+
.then(Packet.parse);
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
module.exports = DOHClient;
|
package/client/google.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
const https = require('https');
|
|
2
|
-
|
|
3
|
-
const get = url => new Promise(resolve =>
|
|
4
|
-
https.get(url, resolve));
|
|
5
|
-
|
|
6
|
-
const readStream = stream => {
|
|
7
|
-
const buffer = [];
|
|
8
|
-
return new Promise((resolve, reject) => {
|
|
9
|
-
stream
|
|
10
|
-
.on('error', reject)
|
|
11
|
-
.on('data', chunk => {
|
|
12
|
-
buffer.push(chunk)
|
|
13
|
-
})
|
|
14
|
-
.on('end', () => resolve(Buffer.concat(buffer)));
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
const GoogleClient = (
|
|
19
|
-
(name, type = 'ANY') => {
|
|
20
|
-
return Promise
|
|
21
|
-
.resolve()
|
|
22
|
-
.then(() => get(`https://dns.google.com/resolve?name=${name}&type=${type}`))
|
|
23
|
-
.then(readStream)
|
|
24
|
-
.then(JSON.parse)
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
module.exports = GoogleClient;
|
|
1
|
+
const https = require('https');
|
|
2
|
+
|
|
3
|
+
const get = url => new Promise(resolve =>
|
|
4
|
+
https.get(url, resolve));
|
|
5
|
+
|
|
6
|
+
const readStream = stream => {
|
|
7
|
+
const buffer = [];
|
|
8
|
+
return new Promise((resolve, reject) => {
|
|
9
|
+
stream
|
|
10
|
+
.on('error', reject)
|
|
11
|
+
.on('data', chunk => {
|
|
12
|
+
buffer.push(chunk);
|
|
13
|
+
})
|
|
14
|
+
.on('end', () => resolve(Buffer.concat(buffer)));
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const GoogleClient = () =>
|
|
19
|
+
(name, type = 'ANY') => {
|
|
20
|
+
return Promise
|
|
21
|
+
.resolve()
|
|
22
|
+
.then(() => get(`https://dns.google.com/resolve?name=${name}&type=${type}`))
|
|
23
|
+
.then(readStream)
|
|
24
|
+
.then(JSON.parse);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
module.exports = GoogleClient;
|
package/client/tcp.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
const tcp = require('net');
|
|
2
|
-
const Packet = require('../packet');
|
|
3
|
-
|
|
4
|
-
module.exports = ({ dns = '1.1.1.1', port = 53 } = {}) => {
|
|
5
|
-
return async
|
|
6
|
-
const packet = new Packet();
|
|
7
|
-
|
|
8
|
-
// see https://github.com/song940/node-dns/issues/29
|
|
9
|
-
if (recursive) {
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
if (clientIp) {
|
|
13
|
-
|
|
14
|
-
Packet.Resource.EDNS.ECS(clientIp)
|
|
15
|
-
]));
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
packet.questions.push({
|
|
19
|
-
name,
|
|
20
|
-
class: cls,
|
|
21
|
-
type: Packet.TYPE[type],
|
|
22
|
-
});
|
|
23
|
-
const message = packet.toBuffer();
|
|
24
|
-
const len = Buffer.alloc(2);
|
|
25
|
-
len.writeUInt16BE(message.length);
|
|
26
|
-
const client = tcp.connect({ host: dns, port });
|
|
27
|
-
client.end(Buffer.concat([len, message]));
|
|
28
|
-
const data = await Packet.readStream(client);
|
|
29
|
-
if (!data.length) {
|
|
30
|
-
throw new Error('Empty TCP response');
|
|
31
|
-
}
|
|
32
|
-
return Packet.parse(data);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
1
|
+
const tcp = require('net');
|
|
2
|
+
const Packet = require('../packet');
|
|
3
|
+
|
|
4
|
+
module.exports = ({ dns = '1.1.1.1', port = 53 } = {}) => {
|
|
5
|
+
return async(name, type = 'A', cls = Packet.CLASS.IN, { clientIp, recursive = true } = {}) => {
|
|
6
|
+
const packet = new Packet();
|
|
7
|
+
|
|
8
|
+
// see https://github.com/song940/node-dns/issues/29
|
|
9
|
+
if (recursive) {
|
|
10
|
+
packet.header.rd = 1;
|
|
11
|
+
}
|
|
12
|
+
if (clientIp) {
|
|
13
|
+
packet.additionals.push(Packet.Resource.EDNS([
|
|
14
|
+
Packet.Resource.EDNS.ECS(clientIp),
|
|
15
|
+
]));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
packet.questions.push({
|
|
19
|
+
name,
|
|
20
|
+
class : cls,
|
|
21
|
+
type : Packet.TYPE[type],
|
|
22
|
+
});
|
|
23
|
+
const message = packet.toBuffer();
|
|
24
|
+
const len = Buffer.alloc(2);
|
|
25
|
+
len.writeUInt16BE(message.length);
|
|
26
|
+
const client = tcp.connect({ host: dns, port });
|
|
27
|
+
client.end(Buffer.concat([ len, message ]));
|
|
28
|
+
const data = await Packet.readStream(client);
|
|
29
|
+
if (!data.length) {
|
|
30
|
+
throw new Error('Empty TCP response');
|
|
31
|
+
}
|
|
32
|
+
return Packet.parse(data);
|
|
33
|
+
};
|
|
34
|
+
};
|
package/client/udp.js
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
const udp = require('dgram');
|
|
2
|
-
const Packet = require('../packet');
|
|
3
|
-
const { equal } = require('assert');
|
|
4
|
-
const { debuglog } = require('util');
|
|
5
|
-
|
|
6
|
-
const debug = debuglog('dns2');
|
|
7
|
-
|
|
8
|
-
module.exports = ({ dns = '8.8.8.8', port = 53, socketType = 'udp4' } = {}) => {
|
|
9
|
-
return (name, type = 'A', cls = Packet.CLASS.IN, { clientIp, recursive = true } = {}) => {
|
|
10
|
-
const query = new Packet();
|
|
11
|
-
query.header.id = (Math.random() * 1e4) | 0;
|
|
12
|
-
|
|
13
|
-
// see https://github.com/song940/node-dns/issues/29
|
|
14
|
-
if (recursive) {
|
|
15
|
-
query.header.rd = 1;
|
|
16
|
-
}
|
|
17
|
-
if (clientIp) {
|
|
18
|
-
query.additionals.push(Packet.Resource.EDNS([
|
|
19
|
-
Packet.Resource.EDNS.ECS(clientIp)
|
|
20
|
-
]));
|
|
21
|
-
}
|
|
22
|
-
query.questions.push({
|
|
23
|
-
name,
|
|
24
|
-
class: cls,
|
|
25
|
-
type: Packet.TYPE[type],
|
|
26
|
-
});
|
|
27
|
-
const client = new udp.Socket(socketType);
|
|
28
|
-
return new Promise((resolve, reject) => {
|
|
29
|
-
client.once('message', function onMessage(message) {
|
|
30
|
-
client.close();
|
|
31
|
-
const response = Packet.parse(message);
|
|
32
|
-
equal(response.header.id, query.header.id);
|
|
33
|
-
resolve(response);
|
|
34
|
-
});
|
|
35
|
-
debug('send', dns, query.toBuffer());
|
|
36
|
-
client.send(query.toBuffer(), port, dns, err => err && reject(err));
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
};
|
|
1
|
+
const udp = require('dgram');
|
|
2
|
+
const Packet = require('../packet');
|
|
3
|
+
const { equal } = require('assert');
|
|
4
|
+
const { debuglog } = require('util');
|
|
5
|
+
|
|
6
|
+
const debug = debuglog('dns2');
|
|
7
|
+
|
|
8
|
+
module.exports = ({ dns = '8.8.8.8', port = 53, socketType = 'udp4' } = {}) => {
|
|
9
|
+
return (name, type = 'A', cls = Packet.CLASS.IN, { clientIp, recursive = true } = {}) => {
|
|
10
|
+
const query = new Packet();
|
|
11
|
+
query.header.id = (Math.random() * 1e4) | 0;
|
|
12
|
+
|
|
13
|
+
// see https://github.com/song940/node-dns/issues/29
|
|
14
|
+
if (recursive) {
|
|
15
|
+
query.header.rd = 1;
|
|
16
|
+
}
|
|
17
|
+
if (clientIp) {
|
|
18
|
+
query.additionals.push(Packet.Resource.EDNS([
|
|
19
|
+
Packet.Resource.EDNS.ECS(clientIp),
|
|
20
|
+
]));
|
|
21
|
+
}
|
|
22
|
+
query.questions.push({
|
|
23
|
+
name,
|
|
24
|
+
class : cls,
|
|
25
|
+
type : Packet.TYPE[type],
|
|
26
|
+
});
|
|
27
|
+
const client = new udp.Socket(socketType);
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
client.once('message', function onMessage(message) {
|
|
30
|
+
client.close();
|
|
31
|
+
const response = Packet.parse(message);
|
|
32
|
+
equal(response.header.id, query.header.id);
|
|
33
|
+
resolve(response);
|
|
34
|
+
});
|
|
35
|
+
debug('send', dns, query.toBuffer());
|
|
36
|
+
client.send(query.toBuffer(), port, dns, err => err && reject(err));
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
};
|
package/example/client/doh.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
const { DOHClient } = require('../..');
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
})();
|
|
1
|
+
const { DOHClient } = require('../..');
|
|
2
|
+
|
|
3
|
+
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
|
4
|
+
|
|
5
|
+
const resolve = DOHClient({
|
|
6
|
+
dns: '1.1.1.1',
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
(async() => {
|
|
10
|
+
const response = await resolve('google.com');
|
|
11
|
+
console.log(response.answers);
|
|
12
|
+
})();
|
package/example/client/google.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
const { GoogleClient } = require('../..');
|
|
2
|
-
|
|
3
|
-
(async
|
|
4
|
-
const resolve = GoogleClient();
|
|
5
|
-
const response = await resolve('google.com');
|
|
6
|
-
console.log(response);
|
|
7
|
-
|
|
8
|
-
})();
|
|
1
|
+
const { GoogleClient } = require('../..');
|
|
2
|
+
|
|
3
|
+
(async() => {
|
|
4
|
+
const resolve = GoogleClient();
|
|
5
|
+
const response = await resolve('google.com');
|
|
6
|
+
console.log(response);
|
|
7
|
+
})();
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
const { TCPClient } = require('../..');
|
|
2
|
-
|
|
3
|
-
const resolve = TCPClient({
|
|
4
|
-
dns: '1.1.1.1'
|
|
5
|
-
});
|
|
6
|
-
|
|
7
|
-
(async
|
|
8
|
-
const response = await resolve('google.com')
|
|
9
|
-
console.log(response.answers);
|
|
10
|
-
})();
|
|
1
|
+
const { TCPClient } = require('../..');
|
|
2
|
+
|
|
3
|
+
const resolve = TCPClient({
|
|
4
|
+
dns: '1.1.1.1',
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
(async() => {
|
|
8
|
+
const response = await resolve('google.com');
|
|
9
|
+
console.log(response.answers);
|
|
10
|
+
})();
|
package/example/client/tcp.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
const { TCPClient } = require('../..');
|
|
2
|
-
|
|
3
|
-
const resolve = TCPClient();
|
|
4
|
-
|
|
5
|
-
(async
|
|
6
|
-
try {
|
|
7
|
-
const response = await resolve('google.com')
|
|
8
|
-
console.log(response.answers);
|
|
9
|
-
} catch(error) {
|
|
10
|
-
console.log(error);
|
|
11
|
-
}
|
|
12
|
-
})();
|
|
1
|
+
const { TCPClient } = require('../..');
|
|
2
|
+
|
|
3
|
+
const resolve = TCPClient();
|
|
4
|
+
|
|
5
|
+
(async() => {
|
|
6
|
+
try {
|
|
7
|
+
const response = await resolve('google.com');
|
|
8
|
+
console.log(response.answers);
|
|
9
|
+
} catch (error) {
|
|
10
|
+
console.log(error);
|
|
11
|
+
}
|
|
12
|
+
})();
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
const dns = require('dns');
|
|
2
|
-
const { UDPClient } = require('../..');
|
|
3
|
-
|
|
4
|
-
const resolve = UDPClient({
|
|
5
|
-
dns: dns.getServers()[0]
|
|
6
|
-
});
|
|
7
|
-
|
|
8
|
-
(async
|
|
9
|
-
const response = await resolve('google.com')
|
|
10
|
-
console.log(response.answers);
|
|
11
|
-
})();
|
|
1
|
+
const dns = require('dns');
|
|
2
|
+
const { UDPClient } = require('../..');
|
|
3
|
+
|
|
4
|
+
const resolve = UDPClient({
|
|
5
|
+
dns: dns.getServers()[0],
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
(async() => {
|
|
9
|
+
const response = await resolve('google.com');
|
|
10
|
+
console.log(response.answers);
|
|
11
|
+
})();
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const DNS = require('../..');
|
|
2
|
-
|
|
3
|
-
const dns = new DNS();
|
|
4
|
-
|
|
5
|
-
(async
|
|
6
|
-
const result = await dns.resolveA('google.com');
|
|
7
|
-
console.log(result.answers);
|
|
8
|
-
})();
|
|
1
|
+
const DNS = require('../..');
|
|
2
|
+
|
|
3
|
+
const dns = new DNS();
|
|
4
|
+
|
|
5
|
+
(async() => {
|
|
6
|
+
const result = await dns.resolveA('google.com');
|
|
7
|
+
console.log(result.answers);
|
|
8
|
+
})();
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
const DNS = require('../..');
|
|
2
|
-
|
|
3
|
-
// Lookup directly from ns1.google.com
|
|
4
|
-
const dns = new DNS({nameServers: ['216.239.32.10']});
|
|
5
|
-
|
|
6
|
-
(async
|
|
7
|
-
// What is the IP address for google.com if a client in the subnet
|
|
8
|
-
// '178.67.222.0/24' asks for it?
|
|
9
|
-
const result = await dns.resolveA('google.com', '178.67.222.0/24');
|
|
10
|
-
console.log(result.answers);
|
|
11
|
-
})();
|
|
1
|
+
const DNS = require('../..');
|
|
2
|
+
|
|
3
|
+
// Lookup directly from ns1.google.com
|
|
4
|
+
const dns = new DNS({ nameServers: [ '216.239.32.10' ] });
|
|
5
|
+
|
|
6
|
+
(async() => {
|
|
7
|
+
// What is the IP address for google.com if a client in the subnet
|
|
8
|
+
// '178.67.222.0/24' asks for it?
|
|
9
|
+
const result = await dns.resolveA('google.com', '178.67.222.0/24');
|
|
10
|
+
console.log(result.answers);
|
|
11
|
+
})();
|
package/example/client/udp.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const { UDPClient } = require('../..');
|
|
2
|
-
|
|
3
|
-
const resolve = UDPClient();
|
|
4
|
-
|
|
5
|
-
(async
|
|
6
|
-
const response = await resolve('google.com')
|
|
7
|
-
console.log(response.answers);
|
|
8
|
-
})();
|
|
1
|
+
const { UDPClient } = require('../..');
|
|
2
|
+
|
|
3
|
+
const resolve = UDPClient();
|
|
4
|
+
|
|
5
|
+
(async() => {
|
|
6
|
+
const response = await resolve('google.com');
|
|
7
|
+
console.log(response.answers);
|
|
8
|
+
})();
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
const dns = require('../..');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
|
|
5
|
+
const { Packet } = dns;
|
|
6
|
+
|
|
7
|
+
// Create a SSL enabled server
|
|
8
|
+
const server = dns.createServer({
|
|
9
|
+
udp : true,
|
|
10
|
+
tcp : true,
|
|
11
|
+
doh : {
|
|
12
|
+
ssl : true,
|
|
13
|
+
cert : fs.readFileSync(path.join(__dirname, 'server.crt')),
|
|
14
|
+
key : fs.readFileSync(path.join(__dirname, 'secret.key')),
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// Handle the incomming request (same style as both UDP and TCP server)
|
|
19
|
+
server.on('request', (request, send, client) => {
|
|
20
|
+
const response = Packet.createResponseFromRequest(request);
|
|
21
|
+
const [ question ] = request.questions;
|
|
22
|
+
const { name } = question;
|
|
23
|
+
response.answers.push({
|
|
24
|
+
name,
|
|
25
|
+
type : Packet.TYPE.A,
|
|
26
|
+
class : Packet.CLASS.IN,
|
|
27
|
+
ttl : 300,
|
|
28
|
+
address : '1.1.1.1',
|
|
29
|
+
});
|
|
30
|
+
send(response);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
(async() => {
|
|
34
|
+
const closed = new Promise(resolve => process.on('SIGINT', resolve));
|
|
35
|
+
await server.listen({
|
|
36
|
+
doh : 8443,
|
|
37
|
+
udp : 5333,
|
|
38
|
+
tcp : 5334,
|
|
39
|
+
});
|
|
40
|
+
console.log('Listening.');
|
|
41
|
+
console.log(server.addresses());
|
|
42
|
+
await closed;
|
|
43
|
+
process.stdout.write('\n');
|
|
44
|
+
await server.close();
|
|
45
|
+
console.log('Closed.');
|
|
46
|
+
})();
|
package/example/server/doh.js
CHANGED
|
@@ -1,28 +1,30 @@
|
|
|
1
|
-
const dns = require('../..');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
const fs = require('fs');
|
|
4
|
-
|
|
5
|
-
const { Packet } = dns;
|
|
6
|
-
|
|
7
|
-
// Create a SSL enabled server
|
|
8
|
-
const server = dns.createDOHServer({
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
//Handle the incomming request (same style as both UDP and TCP server)
|
|
16
|
-
server.on('request', (request, send, client) => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
1
|
+
const dns = require('../..');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
|
|
5
|
+
const { Packet } = dns;
|
|
6
|
+
|
|
7
|
+
// Create a SSL enabled server
|
|
8
|
+
const server = dns.createDOHServer({
|
|
9
|
+
port : 8080,
|
|
10
|
+
ssl : true,
|
|
11
|
+
cert : fs.readFileSync(path.join(__dirname, 'server.crt')),
|
|
12
|
+
key : fs.readFileSync(path.join(__dirname, 'secret.key')),
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
// Handle the incomming request (same style as both UDP and TCP server)
|
|
16
|
+
server.on('request', (request, send, client) => {
|
|
17
|
+
const response = Packet.createResponseFromRequest(request);
|
|
18
|
+
const [ question ] = request.questions;
|
|
19
|
+
const { name } = question;
|
|
20
|
+
response.answers.push({
|
|
21
|
+
name,
|
|
22
|
+
type : Packet.TYPE.A,
|
|
23
|
+
class : Packet.CLASS.IN,
|
|
24
|
+
ttl : 300,
|
|
25
|
+
address : '1.1.1.1',
|
|
26
|
+
});
|
|
27
|
+
send(response);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
server.listen();
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
-----BEGIN PRIVATE KEY-----
|
|
2
|
-
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDLodEOCR2A593i
|
|
3
|
-
wZR7xkHOgHeCK697OXknn4okuUqopUo5qcQeqcvNJ+McMNGexwpg3YuIHKYYGmtw
|
|
4
|
-
1QCoeqCOPoyZUed6GK5r7CkQl+hsCMrbRFpM8B8RmlsxVoot52WyfhF0lJT087g9
|
|
5
|
-
L4P1/rwcE6NGMkpvpCl/3mo90AYvFyX+LWpBFi4j3hx33LoTiuMunhOROWNobG1Z
|
|
6
|
-
GWYsoQriCq6mO9SOk1sbKXnr27yMaxbHcjZO36ZJxobrkHManVtmAQIlW0j66MLj
|
|
7
|
-
6xsa9AZep0zFVQnoRZA56GYyH81RNAdxps1Nr7GYgRi4kyDLGvo2ZTJUuxpbiR68
|
|
8
|
-
dcL8yKJ9AgMBAAECggEAJzC0cFQWxolZbdu9vPiSD7EvzvCjbD7Kb3LH/ntewAhX
|
|
9
|
-
ubNPmGsrWweTMQjAPyOlfrEEuqRw3vCuvt9vqf03y0iEfLmDqD75yrF/0b66r5gd
|
|
10
|
-
moeULXyFLjkb1eoG3ADN1MVojJxP8ri5O6Vaa0ykXW72HHtvUf8xMXfX0J+poQQm
|
|
11
|
-
FnGC0g6ky6VfIlP6XxJNnC1EHcu3g1DxXEp8ALeP2UBiGuXNUTTXix+fqpVep2DP
|
|
12
|
-
C+n/YTo7N6yqKrJCP97Fspd0We2rsT/DDPsOv4E44veLY/iZuyO01Eorp6PavXhg
|
|
13
|
-
0WJyGN4eww7F4yzYQcJZjM6MmEkYJHVxK0Nz5NIB4QKBgQD+oDmkD5mL365f/Yhr
|
|
14
|
-
32sRbTX311Grg0485us9rcyUj7HN82MVy3I5na/DxmQFyXJ3jaAi9cO3IFRpCyT5
|
|
15
|
-
yVlNp0ufD4oBa/wbceVTOf5xkl0uRi9XxaC97r5kIWX/I4g3xRivqWW9I+Hs8PKv
|
|
16
|
-
RphNFIadH81AbKVk0DD51usABQKBgQDMuyRHC1xN8uAOe1y23ytveFJImb0Rr6XL
|
|
17
|
-
/ml/zpVzR+4r89FVI5NDYtKdUctkQuk6hSkPfLeURqekUD64nqK+5+hKuLy6Eqjw
|
|
18
|
-
Vd5+Ah/Z18n1q37NuTwxi5XTBZfNDjWJnYKT3NSg1I10CVT+FDzzlA5AT0zzvTZM
|
|
19
|
-
0JeIDSq6GQKBgHWx8BLSlyHdace69FUQd3gdqAWAhKKn1gE2p+Phsx+0b/aHmvRX
|
|
20
|
-
Dtxs8/KlgFRgckWqtCuUuDusePf5C8Vd+aZ4Pu8uCpdvp5+z/NGEjAVJJ0MddAK5
|
|
21
|
-
OfyxH1Y/TdsqPGuy8h84SOuta1/PXA4CrqFqbHKyYXh2/9hil1DUs9lVAoGAcYaQ
|
|
22
|
-
jkixbZPxRHaJqepElrJcxl9h5U3GHUE9VR7D5sILQxoXiSOKBILnEU+K/lTQKaAv
|
|
23
|
-
baQV1EX9rfLFZPCqhDvqpoycMn4oaeTj1HHvIYg0OGNZlFBUHZEuim5+h7mKXH4Y
|
|
24
|
-
K0/4JBrZOW/3TlEAn30JDgYrQLk6RAwjCtFqUPkCgYEA9Ukemwm/Tfx/YTzPnfrs
|
|
25
|
-
BnaI9VBtqET/Z8/VvZcNTyuNcwkRJtRvnqHiJaAIZE+dSwdIHlgyZfTYDTVTEDhd
|
|
26
|
-
NoiSrV/pgjLysSOzr8gqaO5alZNaBW+05/LqlluqSD7wyVs+lWaAviJ+SIpabt9j
|
|
27
|
-
XMzR/9OBxoVDL4Zqny4nkB0=
|
|
28
|
-
-----END PRIVATE KEY-----
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
|
2
|
+
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDLodEOCR2A593i
|
|
3
|
+
wZR7xkHOgHeCK697OXknn4okuUqopUo5qcQeqcvNJ+McMNGexwpg3YuIHKYYGmtw
|
|
4
|
+
1QCoeqCOPoyZUed6GK5r7CkQl+hsCMrbRFpM8B8RmlsxVoot52WyfhF0lJT087g9
|
|
5
|
+
L4P1/rwcE6NGMkpvpCl/3mo90AYvFyX+LWpBFi4j3hx33LoTiuMunhOROWNobG1Z
|
|
6
|
+
GWYsoQriCq6mO9SOk1sbKXnr27yMaxbHcjZO36ZJxobrkHManVtmAQIlW0j66MLj
|
|
7
|
+
6xsa9AZep0zFVQnoRZA56GYyH81RNAdxps1Nr7GYgRi4kyDLGvo2ZTJUuxpbiR68
|
|
8
|
+
dcL8yKJ9AgMBAAECggEAJzC0cFQWxolZbdu9vPiSD7EvzvCjbD7Kb3LH/ntewAhX
|
|
9
|
+
ubNPmGsrWweTMQjAPyOlfrEEuqRw3vCuvt9vqf03y0iEfLmDqD75yrF/0b66r5gd
|
|
10
|
+
moeULXyFLjkb1eoG3ADN1MVojJxP8ri5O6Vaa0ykXW72HHtvUf8xMXfX0J+poQQm
|
|
11
|
+
FnGC0g6ky6VfIlP6XxJNnC1EHcu3g1DxXEp8ALeP2UBiGuXNUTTXix+fqpVep2DP
|
|
12
|
+
C+n/YTo7N6yqKrJCP97Fspd0We2rsT/DDPsOv4E44veLY/iZuyO01Eorp6PavXhg
|
|
13
|
+
0WJyGN4eww7F4yzYQcJZjM6MmEkYJHVxK0Nz5NIB4QKBgQD+oDmkD5mL365f/Yhr
|
|
14
|
+
32sRbTX311Grg0485us9rcyUj7HN82MVy3I5na/DxmQFyXJ3jaAi9cO3IFRpCyT5
|
|
15
|
+
yVlNp0ufD4oBa/wbceVTOf5xkl0uRi9XxaC97r5kIWX/I4g3xRivqWW9I+Hs8PKv
|
|
16
|
+
RphNFIadH81AbKVk0DD51usABQKBgQDMuyRHC1xN8uAOe1y23ytveFJImb0Rr6XL
|
|
17
|
+
/ml/zpVzR+4r89FVI5NDYtKdUctkQuk6hSkPfLeURqekUD64nqK+5+hKuLy6Eqjw
|
|
18
|
+
Vd5+Ah/Z18n1q37NuTwxi5XTBZfNDjWJnYKT3NSg1I10CVT+FDzzlA5AT0zzvTZM
|
|
19
|
+
0JeIDSq6GQKBgHWx8BLSlyHdace69FUQd3gdqAWAhKKn1gE2p+Phsx+0b/aHmvRX
|
|
20
|
+
Dtxs8/KlgFRgckWqtCuUuDusePf5C8Vd+aZ4Pu8uCpdvp5+z/NGEjAVJJ0MddAK5
|
|
21
|
+
OfyxH1Y/TdsqPGuy8h84SOuta1/PXA4CrqFqbHKyYXh2/9hil1DUs9lVAoGAcYaQ
|
|
22
|
+
jkixbZPxRHaJqepElrJcxl9h5U3GHUE9VR7D5sILQxoXiSOKBILnEU+K/lTQKaAv
|
|
23
|
+
baQV1EX9rfLFZPCqhDvqpoycMn4oaeTj1HHvIYg0OGNZlFBUHZEuim5+h7mKXH4Y
|
|
24
|
+
K0/4JBrZOW/3TlEAn30JDgYrQLk6RAwjCtFqUPkCgYEA9Ukemwm/Tfx/YTzPnfrs
|
|
25
|
+
BnaI9VBtqET/Z8/VvZcNTyuNcwkRJtRvnqHiJaAIZE+dSwdIHlgyZfTYDTVTEDhd
|
|
26
|
+
NoiSrV/pgjLysSOzr8gqaO5alZNaBW+05/LqlluqSD7wyVs+lWaAviJ+SIpabt9j
|
|
27
|
+
XMzR/9OBxoVDL4Zqny4nkB0=
|
|
28
|
+
-----END PRIVATE KEY-----
|