n8n-nodes-dns 0.1.0
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/LICENSE +21 -0
- package/README.md +186 -0
- package/dist/coverage/lcov-report/favicon.png +0 -0
- package/dist/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/dist/package.json +97 -0
- package/dist/src/credentials/DnsServerApi.credentials.d.ts +7 -0
- package/dist/src/credentials/DnsServerApi.credentials.js +30 -0
- package/dist/src/credentials/DnsServerApi.credentials.js.map +1 -0
- package/dist/src/credentials/dnsServerApi.svg +4 -0
- package/dist/src/nodes/DnsLookup/DnsLookup.node.d.ts +16 -0
- package/dist/src/nodes/DnsLookup/DnsLookup.node.js +222 -0
- package/dist/src/nodes/DnsLookup/DnsLookup.node.js.map +1 -0
- package/dist/src/nodes/DnsLookup/DnsLookup.node.json +33 -0
- package/dist/src/nodes/DnsLookup/dnsLookup.svg +4 -0
- package/dist/src/nodes/DnsWatch/DnsWatch.node.d.ts +15 -0
- package/dist/src/nodes/DnsWatch/DnsWatch.node.js +247 -0
- package/dist/src/nodes/DnsWatch/DnsWatch.node.js.map +1 -0
- package/dist/src/nodes/DnsWatch/DnsWatch.node.json +26 -0
- package/dist/src/nodes/DnsWatch/dnsWatch.svg +4 -0
- package/dist/src/nodes/shared/dns-node-helpers.d.ts +43 -0
- package/dist/src/nodes/shared/dns-node-helpers.js +133 -0
- package/dist/src/nodes/shared/dns-node-helpers.js.map +1 -0
- package/dist/src/nodes/shared/dns-node-properties.d.ts +6 -0
- package/dist/src/nodes/shared/dns-node-properties.js +139 -0
- package/dist/src/nodes/shared/dns-node-properties.js.map +1 -0
- package/dist/src/transport/dns-client.d.ts +22 -0
- package/dist/src/transport/dns-client.js +168 -0
- package/dist/src/transport/dns-client.js.map +1 -0
- package/dist/src/transport/dns-packet.d.ts +49 -0
- package/dist/src/transport/dns-packet.js +178 -0
- package/dist/src/transport/dns-packet.js.map +1 -0
- package/dist/src/transport/dns-resolvers.d.ts +18 -0
- package/dist/src/transport/dns-resolvers.js +132 -0
- package/dist/src/transport/dns-resolvers.js.map +1 -0
- package/dist/src/transport/index.d.ts +6 -0
- package/dist/src/transport/index.js +21 -0
- package/dist/src/transport/index.js.map +1 -0
- package/dist/src/utils/authoritative-discovery.d.ts +9 -0
- package/dist/src/utils/authoritative-discovery.js +77 -0
- package/dist/src/utils/authoritative-discovery.js.map +1 -0
- package/dist/src/utils/index.d.ts +8 -0
- package/dist/src/utils/index.js +13 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/name-compression.d.ts +5 -0
- package/dist/src/utils/name-compression.js +63 -0
- package/dist/src/utils/name-compression.js.map +1 -0
- package/dist/src/utils/record-parsers.d.ts +53 -0
- package/dist/src/utils/record-parsers.js +232 -0
- package/dist/src/utils/record-parsers.js.map +1 -0
- package/dist/src/utils/txt-parsers.d.ts +40 -0
- package/dist/src/utils/txt-parsers.js +204 -0
- package/dist/src/utils/txt-parsers.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { DnsRecordType, DnsResponse } from './dns-packet';
|
|
2
|
+
export interface DnsServer {
|
|
3
|
+
address: string;
|
|
4
|
+
port: number;
|
|
5
|
+
}
|
|
6
|
+
export interface DnsClientOptions {
|
|
7
|
+
timeoutMilliseconds?: number;
|
|
8
|
+
retryCount?: number;
|
|
9
|
+
recursionDesired?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface DnsServerResult {
|
|
12
|
+
server: DnsServer;
|
|
13
|
+
response: DnsResponse | null;
|
|
14
|
+
responseCode: string;
|
|
15
|
+
truncated: boolean;
|
|
16
|
+
responseTimeMilliseconds: number;
|
|
17
|
+
}
|
|
18
|
+
export interface DnsQueryResult {
|
|
19
|
+
results: DnsServerResult[];
|
|
20
|
+
}
|
|
21
|
+
export declare function querySingleServer(domain: string, recordType: DnsRecordType, server: DnsServer, options?: DnsClientOptions): Promise<DnsServerResult>;
|
|
22
|
+
export declare function queryMultipleServers(domain: string, recordType: DnsRecordType, servers: DnsServer[], options?: DnsClientOptions): Promise<DnsQueryResult>;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.querySingleServer = querySingleServer;
|
|
37
|
+
exports.queryMultipleServers = queryMultipleServers;
|
|
38
|
+
const dgram = __importStar(require("dgram"));
|
|
39
|
+
const dns_packet_1 = require("./dns-packet");
|
|
40
|
+
const DEFAULT_TIMEOUT_MILLISECONDS = 5000;
|
|
41
|
+
const DEFAULT_RETRY_COUNT = 1;
|
|
42
|
+
const TIMEOUT_RESPONSE_CODE = 'TIMEOUT';
|
|
43
|
+
const UNKNOWN_RESPONSE_CODE = 'UNKNOWN';
|
|
44
|
+
class DnsTimeoutError extends Error {
|
|
45
|
+
constructor(server) {
|
|
46
|
+
super(`DNS query to ${server.address}:${server.port} timed out`);
|
|
47
|
+
this.code = 'ETIMEOUT';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function extractTransactionId(packet) {
|
|
51
|
+
return packet.readUInt16BE(0);
|
|
52
|
+
}
|
|
53
|
+
function isTimeoutError(error) {
|
|
54
|
+
return error instanceof DnsTimeoutError;
|
|
55
|
+
}
|
|
56
|
+
function sendQuery(packet, expectedTransactionId, server, timeoutMilliseconds) {
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
let settled = false;
|
|
59
|
+
const socket = dgram.createSocket('udp4');
|
|
60
|
+
function trySettle() {
|
|
61
|
+
if (settled)
|
|
62
|
+
return false;
|
|
63
|
+
settled = true;
|
|
64
|
+
clearTimeout(timer);
|
|
65
|
+
socket.close();
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
const timer = setTimeout(() => {
|
|
69
|
+
if (trySettle())
|
|
70
|
+
reject(new DnsTimeoutError(server));
|
|
71
|
+
}, timeoutMilliseconds);
|
|
72
|
+
socket.on('message', (message) => {
|
|
73
|
+
if (message.readUInt16BE(0) !== expectedTransactionId)
|
|
74
|
+
return;
|
|
75
|
+
if (trySettle())
|
|
76
|
+
resolve(message);
|
|
77
|
+
});
|
|
78
|
+
socket.on('error', (error) => {
|
|
79
|
+
if (trySettle())
|
|
80
|
+
reject(error);
|
|
81
|
+
});
|
|
82
|
+
socket.send(packet, 0, packet.length, server.port, server.address, (sendError) => {
|
|
83
|
+
if (sendError && trySettle())
|
|
84
|
+
reject(sendError);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
async function queryWithRetry(packet, expectedTransactionId, server, timeoutMilliseconds, retryCount) {
|
|
89
|
+
const totalAttempts = 1 + retryCount;
|
|
90
|
+
for (let attempt = 0; attempt < totalAttempts; attempt++) {
|
|
91
|
+
try {
|
|
92
|
+
return await sendQuery(packet, expectedTransactionId, server, timeoutMilliseconds);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
const isLastAttempt = attempt === totalAttempts - 1;
|
|
96
|
+
if (!isTimeoutError(error) || isLastAttempt)
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
throw new DnsTimeoutError(server);
|
|
101
|
+
}
|
|
102
|
+
function buildServerResult(server, response, responseTimeMilliseconds) {
|
|
103
|
+
var _a;
|
|
104
|
+
const numericCode = response.header.flags.responseCode;
|
|
105
|
+
const responseCode = (_a = dns_packet_1.RESPONSE_CODE_NAMES[numericCode]) !== null && _a !== void 0 ? _a : UNKNOWN_RESPONSE_CODE;
|
|
106
|
+
return {
|
|
107
|
+
server,
|
|
108
|
+
response,
|
|
109
|
+
responseCode,
|
|
110
|
+
truncated: response.header.flags.truncated,
|
|
111
|
+
responseTimeMilliseconds,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function buildTimeoutResult(server) {
|
|
115
|
+
return {
|
|
116
|
+
server,
|
|
117
|
+
response: null,
|
|
118
|
+
responseCode: TIMEOUT_RESPONSE_CODE,
|
|
119
|
+
truncated: false,
|
|
120
|
+
responseTimeMilliseconds: 0,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function buildNetworkErrorResult(server, error) {
|
|
124
|
+
return {
|
|
125
|
+
server,
|
|
126
|
+
response: null,
|
|
127
|
+
responseCode: error.message,
|
|
128
|
+
truncated: false,
|
|
129
|
+
responseTimeMilliseconds: 0,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
async function querySingleServer(domain, recordType, server, options) {
|
|
133
|
+
var _a, _b, _c;
|
|
134
|
+
const timeoutMilliseconds = (_a = options === null || options === void 0 ? void 0 : options.timeoutMilliseconds) !== null && _a !== void 0 ? _a : DEFAULT_TIMEOUT_MILLISECONDS;
|
|
135
|
+
const retryCount = (_b = options === null || options === void 0 ? void 0 : options.retryCount) !== null && _b !== void 0 ? _b : DEFAULT_RETRY_COUNT;
|
|
136
|
+
const recursionDesired = (_c = options === null || options === void 0 ? void 0 : options.recursionDesired) !== null && _c !== void 0 ? _c : true;
|
|
137
|
+
const packet = (0, dns_packet_1.encodeQuery)(domain, recordType, { recursionDesired });
|
|
138
|
+
const transactionId = extractTransactionId(packet);
|
|
139
|
+
const startTime = Date.now();
|
|
140
|
+
try {
|
|
141
|
+
const responseBuffer = await queryWithRetry(packet, transactionId, server, timeoutMilliseconds, retryCount);
|
|
142
|
+
const response = (0, dns_packet_1.decodeResponse)(responseBuffer);
|
|
143
|
+
const elapsed = Date.now() - startTime;
|
|
144
|
+
return buildServerResult(server, response, elapsed);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
if (isTimeoutError(error))
|
|
148
|
+
return buildTimeoutResult(server);
|
|
149
|
+
const message = `DNS query to ${server.address}:${server.port} failed: ` +
|
|
150
|
+
(error instanceof Error ? error.message : String(error));
|
|
151
|
+
throw new Error(message);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async function queryMultipleServers(domain, recordType, servers, options) {
|
|
155
|
+
if (servers.length === 0)
|
|
156
|
+
return { results: [] };
|
|
157
|
+
const promises = servers.map((server) => querySingleServer(domain, recordType, server, options));
|
|
158
|
+
const settled = await Promise.allSettled(promises);
|
|
159
|
+
const results = settled.map((outcome, index) => {
|
|
160
|
+
if (outcome.status === 'fulfilled')
|
|
161
|
+
return outcome.value;
|
|
162
|
+
const server = servers[index];
|
|
163
|
+
const error = outcome.reason instanceof Error ? outcome.reason : new Error(String(outcome.reason));
|
|
164
|
+
return buildNetworkErrorResult(server, error);
|
|
165
|
+
});
|
|
166
|
+
return { results };
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=dns-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dns-client.js","sourceRoot":"","sources":["../../../src/transport/dns-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export type DnsRecordType = 'A' | 'AAAA' | 'MX' | 'TXT' | 'SRV' | 'PTR' | 'CAA' | 'SOA' | 'NS' | 'CNAME' | 'NAPTR' | 'DNSKEY' | 'TLSA';
|
|
2
|
+
export interface QueryFlags {
|
|
3
|
+
recursionDesired?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export interface DnsHeaderFlags {
|
|
6
|
+
queryResponse: boolean;
|
|
7
|
+
opcode: number;
|
|
8
|
+
authoritative: boolean;
|
|
9
|
+
truncated: boolean;
|
|
10
|
+
recursionDesired: boolean;
|
|
11
|
+
recursionAvailable: boolean;
|
|
12
|
+
responseCode: number;
|
|
13
|
+
}
|
|
14
|
+
export interface DnsHeader {
|
|
15
|
+
transactionId: number;
|
|
16
|
+
flags: DnsHeaderFlags;
|
|
17
|
+
questionCount: number;
|
|
18
|
+
answerCount: number;
|
|
19
|
+
authorityCount: number;
|
|
20
|
+
additionalCount: number;
|
|
21
|
+
}
|
|
22
|
+
export interface DnsQuestion {
|
|
23
|
+
name: string;
|
|
24
|
+
recordType: number;
|
|
25
|
+
recordClass: number;
|
|
26
|
+
}
|
|
27
|
+
export interface DnsResourceRecord {
|
|
28
|
+
name: string;
|
|
29
|
+
recordType: number;
|
|
30
|
+
recordClass: number;
|
|
31
|
+
ttl: number;
|
|
32
|
+
rdataLength: number;
|
|
33
|
+
rdata: Buffer;
|
|
34
|
+
rdataOffset: number;
|
|
35
|
+
}
|
|
36
|
+
export interface DnsResponse {
|
|
37
|
+
header: DnsHeader;
|
|
38
|
+
questions: DnsQuestion[];
|
|
39
|
+
answers: DnsResourceRecord[];
|
|
40
|
+
authorities: DnsResourceRecord[];
|
|
41
|
+
additionals: DnsResourceRecord[];
|
|
42
|
+
rawPacket: Buffer;
|
|
43
|
+
}
|
|
44
|
+
export declare const RECORD_TYPE_VALUES: Record<DnsRecordType, number>;
|
|
45
|
+
export declare const RECORD_TYPE_NAMES: Record<number, DnsRecordType>;
|
|
46
|
+
export declare const RESPONSE_CODE_NAMES: Record<number, string>;
|
|
47
|
+
export declare function encodeDomainName(domain: string): Buffer;
|
|
48
|
+
export declare function encodeQuery(domain: string, recordType: DnsRecordType, flags?: QueryFlags): Buffer;
|
|
49
|
+
export declare function decodeResponse(packet: Buffer): DnsResponse;
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RESPONSE_CODE_NAMES = exports.RECORD_TYPE_NAMES = exports.RECORD_TYPE_VALUES = void 0;
|
|
4
|
+
exports.encodeDomainName = encodeDomainName;
|
|
5
|
+
exports.encodeQuery = encodeQuery;
|
|
6
|
+
exports.decodeResponse = decodeResponse;
|
|
7
|
+
const crypto_1 = require("crypto");
|
|
8
|
+
const utils_1 = require("../utils");
|
|
9
|
+
exports.RECORD_TYPE_VALUES = {
|
|
10
|
+
A: 1,
|
|
11
|
+
NS: 2,
|
|
12
|
+
CNAME: 5,
|
|
13
|
+
SOA: 6,
|
|
14
|
+
PTR: 12,
|
|
15
|
+
MX: 15,
|
|
16
|
+
TXT: 16,
|
|
17
|
+
AAAA: 28,
|
|
18
|
+
SRV: 33,
|
|
19
|
+
NAPTR: 35,
|
|
20
|
+
DNSKEY: 48,
|
|
21
|
+
TLSA: 52,
|
|
22
|
+
CAA: 257,
|
|
23
|
+
};
|
|
24
|
+
exports.RECORD_TYPE_NAMES = Object.fromEntries(Object.entries(exports.RECORD_TYPE_VALUES).map(([name, value]) => [value, name]));
|
|
25
|
+
exports.RESPONSE_CODE_NAMES = {
|
|
26
|
+
0: 'NOERROR',
|
|
27
|
+
1: 'FORMERR',
|
|
28
|
+
2: 'SERVFAIL',
|
|
29
|
+
3: 'NXDOMAIN',
|
|
30
|
+
4: 'NOTIMP',
|
|
31
|
+
5: 'REFUSED',
|
|
32
|
+
};
|
|
33
|
+
const HEADER_LENGTH = 12;
|
|
34
|
+
const QUERY_CLASS_IN = 1;
|
|
35
|
+
const MAX_LABEL_LENGTH = 63;
|
|
36
|
+
function encodeDomainName(domain) {
|
|
37
|
+
if (domain === '') {
|
|
38
|
+
return Buffer.from([0x00]);
|
|
39
|
+
}
|
|
40
|
+
const labels = domain.split('.');
|
|
41
|
+
const segments = [];
|
|
42
|
+
let nameLength = 0;
|
|
43
|
+
for (const label of labels) {
|
|
44
|
+
if (label.length === 0) {
|
|
45
|
+
throw new Error('DNS domain name contains an empty label');
|
|
46
|
+
}
|
|
47
|
+
if (label.length > MAX_LABEL_LENGTH) {
|
|
48
|
+
throw new Error(`DNS label "${label.slice(0, 10)}..." length ${label.length} exceeds maximum of ${MAX_LABEL_LENGTH} bytes`);
|
|
49
|
+
}
|
|
50
|
+
nameLength += (nameLength > 0 ? 1 : 0) + label.length;
|
|
51
|
+
if (nameLength > utils_1.DNS_MAX_NAME_LENGTH) {
|
|
52
|
+
throw new Error(`DNS domain name exceeds maximum length of ${utils_1.DNS_MAX_NAME_LENGTH} characters`);
|
|
53
|
+
}
|
|
54
|
+
const lengthByte = Buffer.from([label.length]);
|
|
55
|
+
const labelBytes = Buffer.from(label, 'ascii');
|
|
56
|
+
segments.push(lengthByte, labelBytes);
|
|
57
|
+
}
|
|
58
|
+
segments.push(Buffer.from([0x00]));
|
|
59
|
+
return Buffer.concat(segments);
|
|
60
|
+
}
|
|
61
|
+
function encodeHeader(transactionId, flags, questionCount) {
|
|
62
|
+
var _a;
|
|
63
|
+
const header = Buffer.alloc(HEADER_LENGTH);
|
|
64
|
+
transactionId.copy(header, 0);
|
|
65
|
+
const recursionDesired = (_a = flags.recursionDesired) !== null && _a !== void 0 ? _a : true;
|
|
66
|
+
const flagsWord = recursionDesired ? 0x0100 : 0x0000;
|
|
67
|
+
header.writeUInt16BE(flagsWord, 2);
|
|
68
|
+
header.writeUInt16BE(questionCount, 4);
|
|
69
|
+
return header;
|
|
70
|
+
}
|
|
71
|
+
function encodeQuestion(domain, recordType) {
|
|
72
|
+
const encodedName = encodeDomainName(domain);
|
|
73
|
+
const typeAndClass = Buffer.alloc(4);
|
|
74
|
+
typeAndClass.writeUInt16BE(exports.RECORD_TYPE_VALUES[recordType], 0);
|
|
75
|
+
typeAndClass.writeUInt16BE(QUERY_CLASS_IN, 2);
|
|
76
|
+
return Buffer.concat([encodedName, typeAndClass]);
|
|
77
|
+
}
|
|
78
|
+
function encodeQuery(domain, recordType, flags) {
|
|
79
|
+
const transactionId = (0, crypto_1.randomBytes)(2);
|
|
80
|
+
const header = encodeHeader(transactionId, flags !== null && flags !== void 0 ? flags : {}, 1);
|
|
81
|
+
const question = encodeQuestion(domain, recordType);
|
|
82
|
+
return Buffer.concat([header, question]);
|
|
83
|
+
}
|
|
84
|
+
function decodeHeaderFlags(flagsWord) {
|
|
85
|
+
return {
|
|
86
|
+
queryResponse: (flagsWord & 0x8000) !== 0,
|
|
87
|
+
opcode: (flagsWord >> 11) & 0x0f,
|
|
88
|
+
authoritative: (flagsWord & 0x0400) !== 0,
|
|
89
|
+
truncated: (flagsWord & 0x0200) !== 0,
|
|
90
|
+
recursionDesired: (flagsWord & 0x0100) !== 0,
|
|
91
|
+
recursionAvailable: (flagsWord & 0x0080) !== 0,
|
|
92
|
+
responseCode: flagsWord & 0x000f,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function decodeHeader(packet) {
|
|
96
|
+
if (packet.length < HEADER_LENGTH) {
|
|
97
|
+
throw new Error(`DNS packet too short: expected at least ${HEADER_LENGTH} bytes, got ${packet.length}`);
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
transactionId: packet.readUInt16BE(0),
|
|
101
|
+
flags: decodeHeaderFlags(packet.readUInt16BE(2)),
|
|
102
|
+
questionCount: packet.readUInt16BE(4),
|
|
103
|
+
answerCount: packet.readUInt16BE(6),
|
|
104
|
+
authorityCount: packet.readUInt16BE(8),
|
|
105
|
+
additionalCount: packet.readUInt16BE(10),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function decodeQuestion(packet, offset) {
|
|
109
|
+
const { name, bytesConsumed: nameBytes } = (0, utils_1.decompressName)(packet, offset);
|
|
110
|
+
const typeClassOffset = offset + nameBytes;
|
|
111
|
+
if (typeClassOffset + 4 > packet.length) {
|
|
112
|
+
throw new Error('DNS packet truncated in question section');
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
question: {
|
|
116
|
+
name,
|
|
117
|
+
recordType: packet.readUInt16BE(typeClassOffset),
|
|
118
|
+
recordClass: packet.readUInt16BE(typeClassOffset + 2),
|
|
119
|
+
},
|
|
120
|
+
bytesConsumed: nameBytes + 4,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function decodeResourceRecord(packet, offset) {
|
|
124
|
+
const { name, bytesConsumed: nameBytes } = (0, utils_1.decompressName)(packet, offset);
|
|
125
|
+
const fixedFieldsOffset = offset + nameBytes;
|
|
126
|
+
if (fixedFieldsOffset + 10 > packet.length) {
|
|
127
|
+
throw new Error('DNS packet truncated in resource record');
|
|
128
|
+
}
|
|
129
|
+
const recordType = packet.readUInt16BE(fixedFieldsOffset);
|
|
130
|
+
const recordClass = packet.readUInt16BE(fixedFieldsOffset + 2);
|
|
131
|
+
const ttl = packet.readUInt32BE(fixedFieldsOffset + 4);
|
|
132
|
+
const rdataLength = packet.readUInt16BE(fixedFieldsOffset + 8);
|
|
133
|
+
const rdataOffset = fixedFieldsOffset + 10;
|
|
134
|
+
if (rdataOffset + rdataLength > packet.length) {
|
|
135
|
+
throw new Error('DNS packet truncated in resource record RDATA');
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
record: {
|
|
139
|
+
name,
|
|
140
|
+
recordType,
|
|
141
|
+
recordClass,
|
|
142
|
+
ttl,
|
|
143
|
+
rdataLength,
|
|
144
|
+
rdata: Buffer.from(packet.subarray(rdataOffset, rdataOffset + rdataLength)),
|
|
145
|
+
rdataOffset,
|
|
146
|
+
},
|
|
147
|
+
bytesConsumed: nameBytes + 10 + rdataLength,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function decodeQuestionSection(packet, offset, count) {
|
|
151
|
+
const questions = [];
|
|
152
|
+
let currentOffset = offset;
|
|
153
|
+
for (let questionIndex = 0; questionIndex < count; questionIndex++) {
|
|
154
|
+
const { question, bytesConsumed } = decodeQuestion(packet, currentOffset);
|
|
155
|
+
questions.push(question);
|
|
156
|
+
currentOffset += bytesConsumed;
|
|
157
|
+
}
|
|
158
|
+
return { questions, offset: currentOffset };
|
|
159
|
+
}
|
|
160
|
+
function decodeResourceRecordSection(packet, offset, count) {
|
|
161
|
+
const records = [];
|
|
162
|
+
let currentOffset = offset;
|
|
163
|
+
for (let recordIndex = 0; recordIndex < count; recordIndex++) {
|
|
164
|
+
const { record, bytesConsumed } = decodeResourceRecord(packet, currentOffset);
|
|
165
|
+
records.push(record);
|
|
166
|
+
currentOffset += bytesConsumed;
|
|
167
|
+
}
|
|
168
|
+
return { records, offset: currentOffset };
|
|
169
|
+
}
|
|
170
|
+
function decodeResponse(packet) {
|
|
171
|
+
const header = decodeHeader(packet);
|
|
172
|
+
const { questions, offset: afterQuestions } = decodeQuestionSection(packet, HEADER_LENGTH, header.questionCount);
|
|
173
|
+
const { records: answers, offset: afterAnswers } = decodeResourceRecordSection(packet, afterQuestions, header.answerCount);
|
|
174
|
+
const { records: authorities, offset: afterAuthorities } = decodeResourceRecordSection(packet, afterAnswers, header.authorityCount);
|
|
175
|
+
const { records: additionals } = decodeResourceRecordSection(packet, afterAuthorities, header.additionalCount);
|
|
176
|
+
return { header, questions, answers, authorities, additionals, rawPacket: packet };
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=dns-packet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dns-packet.js","sourceRoot":"","sources":["../../../src/transport/dns-packet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { DnsServer } from './dns-client';
|
|
2
|
+
export declare const DNS_DEFAULT_PORT = 53;
|
|
3
|
+
export interface WellKnownResolver {
|
|
4
|
+
name: string;
|
|
5
|
+
primary: string;
|
|
6
|
+
secondary: string;
|
|
7
|
+
notes: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const WELL_KNOWN_RESOLVERS: readonly WellKnownResolver[];
|
|
10
|
+
export declare function parseResolvConf(content: string): string[];
|
|
11
|
+
export declare function readSystemResolvers(): Promise<DnsServer[]>;
|
|
12
|
+
export declare function getWellKnownServers(resolverNames: string[]): DnsServer[];
|
|
13
|
+
export type ResolverMode = 'wellKnown' | 'custom' | 'system';
|
|
14
|
+
export interface ResolverSelection {
|
|
15
|
+
wellKnownNames?: string[];
|
|
16
|
+
customServers?: DnsServer[];
|
|
17
|
+
}
|
|
18
|
+
export declare function resolveTargetServers(mode: ResolverMode, selection: ResolverSelection): Promise<DnsServer[]>;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.WELL_KNOWN_RESOLVERS = exports.DNS_DEFAULT_PORT = void 0;
|
|
37
|
+
exports.parseResolvConf = parseResolvConf;
|
|
38
|
+
exports.readSystemResolvers = readSystemResolvers;
|
|
39
|
+
exports.getWellKnownServers = getWellKnownServers;
|
|
40
|
+
exports.resolveTargetServers = resolveTargetServers;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
exports.DNS_DEFAULT_PORT = 53;
|
|
43
|
+
const RESOLV_CONF_PATH = '/etc/resolv.conf';
|
|
44
|
+
exports.WELL_KNOWN_RESOLVERS = [
|
|
45
|
+
{
|
|
46
|
+
name: 'Cloudflare',
|
|
47
|
+
primary: '1.1.1.1',
|
|
48
|
+
secondary: '1.0.0.1',
|
|
49
|
+
notes: 'Fastest average response time',
|
|
50
|
+
},
|
|
51
|
+
{ name: 'Google', primary: '8.8.8.8', secondary: '8.8.4.4', notes: 'Widest adoption' },
|
|
52
|
+
{
|
|
53
|
+
name: 'Quad9',
|
|
54
|
+
primary: '9.9.9.9',
|
|
55
|
+
secondary: '149.112.112.112',
|
|
56
|
+
notes: 'Malware blocking enabled',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'Quad9 Unfiltered',
|
|
60
|
+
primary: '9.9.9.10',
|
|
61
|
+
secondary: '149.112.112.10',
|
|
62
|
+
notes: 'No filtering',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'OpenDNS',
|
|
66
|
+
primary: '208.67.222.222',
|
|
67
|
+
secondary: '208.67.220.220',
|
|
68
|
+
notes: 'Cisco-operated',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'Cloudflare Malware',
|
|
72
|
+
primary: '1.1.1.2',
|
|
73
|
+
secondary: '1.0.0.2',
|
|
74
|
+
notes: 'Malware blocking',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'Cloudflare Family',
|
|
78
|
+
primary: '1.1.1.3',
|
|
79
|
+
secondary: '1.0.0.3',
|
|
80
|
+
notes: 'Malware + adult content blocking',
|
|
81
|
+
},
|
|
82
|
+
{ name: 'AdGuard', primary: '94.140.14.14', secondary: '94.140.15.15', notes: 'Ad blocking' },
|
|
83
|
+
{
|
|
84
|
+
name: 'Control D',
|
|
85
|
+
primary: '76.76.2.0',
|
|
86
|
+
secondary: '76.76.10.0',
|
|
87
|
+
notes: 'Configurable filtering',
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
const resolversByName = new Map(exports.WELL_KNOWN_RESOLVERS.map((resolver) => [resolver.name, resolver]));
|
|
91
|
+
function removeComment(line) {
|
|
92
|
+
return line.replace(/[#;].*$/, '');
|
|
93
|
+
}
|
|
94
|
+
function parseResolvConf(content) {
|
|
95
|
+
const nameservers = [];
|
|
96
|
+
for (const rawLine of content.split('\n')) {
|
|
97
|
+
const line = removeComment(rawLine).trim();
|
|
98
|
+
const tokens = line.split(/\s+/);
|
|
99
|
+
if (tokens[0] === 'nameserver' && tokens[1]) {
|
|
100
|
+
nameservers.push(tokens[1]);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return nameservers;
|
|
104
|
+
}
|
|
105
|
+
async function readSystemResolvers() {
|
|
106
|
+
const content = await fs.promises.readFile(RESOLV_CONF_PATH, 'utf-8');
|
|
107
|
+
const addresses = parseResolvConf(content);
|
|
108
|
+
return addresses.map((address) => ({ address, port: exports.DNS_DEFAULT_PORT }));
|
|
109
|
+
}
|
|
110
|
+
function getWellKnownServers(resolverNames) {
|
|
111
|
+
const servers = [];
|
|
112
|
+
for (const name of resolverNames) {
|
|
113
|
+
const resolver = resolversByName.get(name);
|
|
114
|
+
if (!resolver) {
|
|
115
|
+
throw new Error(`Unknown resolver: "${name}"`);
|
|
116
|
+
}
|
|
117
|
+
servers.push({ address: resolver.primary, port: exports.DNS_DEFAULT_PORT }, { address: resolver.secondary, port: exports.DNS_DEFAULT_PORT });
|
|
118
|
+
}
|
|
119
|
+
return servers;
|
|
120
|
+
}
|
|
121
|
+
async function resolveTargetServers(mode, selection) {
|
|
122
|
+
var _a, _b;
|
|
123
|
+
switch (mode) {
|
|
124
|
+
case 'wellKnown':
|
|
125
|
+
return getWellKnownServers((_a = selection.wellKnownNames) !== null && _a !== void 0 ? _a : []);
|
|
126
|
+
case 'custom':
|
|
127
|
+
return (_b = selection.customServers) !== null && _b !== void 0 ? _b : [];
|
|
128
|
+
case 'system':
|
|
129
|
+
return readSystemResolvers();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=dns-resolvers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dns-resolvers.js","sourceRoot":"","sources":["../../../src/transport/dns-resolvers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { encodeQuery, decodeResponse, encodeDomainName, RECORD_TYPE_VALUES, RECORD_TYPE_NAMES, RESPONSE_CODE_NAMES, } from './dns-packet';
|
|
2
|
+
export type { DnsRecordType, DnsHeader, DnsHeaderFlags, DnsQuestion, DnsResourceRecord, DnsResponse, QueryFlags, } from './dns-packet';
|
|
3
|
+
export { querySingleServer, queryMultipleServers } from './dns-client';
|
|
4
|
+
export type { DnsServer, DnsClientOptions, DnsServerResult, DnsQueryResult } from './dns-client';
|
|
5
|
+
export { DNS_DEFAULT_PORT, WELL_KNOWN_RESOLVERS, parseResolvConf, readSystemResolvers, getWellKnownServers, resolveTargetServers, } from './dns-resolvers';
|
|
6
|
+
export type { WellKnownResolver, ResolverMode, ResolverSelection } from './dns-resolvers';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveTargetServers = exports.getWellKnownServers = exports.readSystemResolvers = exports.parseResolvConf = exports.WELL_KNOWN_RESOLVERS = exports.DNS_DEFAULT_PORT = exports.queryMultipleServers = exports.querySingleServer = exports.RESPONSE_CODE_NAMES = exports.RECORD_TYPE_NAMES = exports.RECORD_TYPE_VALUES = exports.encodeDomainName = exports.decodeResponse = exports.encodeQuery = void 0;
|
|
4
|
+
var dns_packet_1 = require("./dns-packet");
|
|
5
|
+
Object.defineProperty(exports, "encodeQuery", { enumerable: true, get: function () { return dns_packet_1.encodeQuery; } });
|
|
6
|
+
Object.defineProperty(exports, "decodeResponse", { enumerable: true, get: function () { return dns_packet_1.decodeResponse; } });
|
|
7
|
+
Object.defineProperty(exports, "encodeDomainName", { enumerable: true, get: function () { return dns_packet_1.encodeDomainName; } });
|
|
8
|
+
Object.defineProperty(exports, "RECORD_TYPE_VALUES", { enumerable: true, get: function () { return dns_packet_1.RECORD_TYPE_VALUES; } });
|
|
9
|
+
Object.defineProperty(exports, "RECORD_TYPE_NAMES", { enumerable: true, get: function () { return dns_packet_1.RECORD_TYPE_NAMES; } });
|
|
10
|
+
Object.defineProperty(exports, "RESPONSE_CODE_NAMES", { enumerable: true, get: function () { return dns_packet_1.RESPONSE_CODE_NAMES; } });
|
|
11
|
+
var dns_client_1 = require("./dns-client");
|
|
12
|
+
Object.defineProperty(exports, "querySingleServer", { enumerable: true, get: function () { return dns_client_1.querySingleServer; } });
|
|
13
|
+
Object.defineProperty(exports, "queryMultipleServers", { enumerable: true, get: function () { return dns_client_1.queryMultipleServers; } });
|
|
14
|
+
var dns_resolvers_1 = require("./dns-resolvers");
|
|
15
|
+
Object.defineProperty(exports, "DNS_DEFAULT_PORT", { enumerable: true, get: function () { return dns_resolvers_1.DNS_DEFAULT_PORT; } });
|
|
16
|
+
Object.defineProperty(exports, "WELL_KNOWN_RESOLVERS", { enumerable: true, get: function () { return dns_resolvers_1.WELL_KNOWN_RESOLVERS; } });
|
|
17
|
+
Object.defineProperty(exports, "parseResolvConf", { enumerable: true, get: function () { return dns_resolvers_1.parseResolvConf; } });
|
|
18
|
+
Object.defineProperty(exports, "readSystemResolvers", { enumerable: true, get: function () { return dns_resolvers_1.readSystemResolvers; } });
|
|
19
|
+
Object.defineProperty(exports, "getWellKnownServers", { enumerable: true, get: function () { return dns_resolvers_1.getWellKnownServers; } });
|
|
20
|
+
Object.defineProperty(exports, "resolveTargetServers", { enumerable: true, get: function () { return dns_resolvers_1.resolveTargetServers; } });
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transport/index.ts"],"names":[],"mappings":";;;AAAA,2CAOsB;AANrB,yGAAA,WAAW,OAAA;AACX,4GAAA,cAAc,OAAA;AACd,8GAAA,gBAAgB,OAAA;AAChB,gHAAA,kBAAkB,OAAA;AAClB,+GAAA,iBAAiB,OAAA;AACjB,iHAAA,mBAAmB,OAAA;AAWpB,2CAAuE;AAA9D,+GAAA,iBAAiB,OAAA;AAAE,kHAAA,oBAAoB,OAAA;AAEhD,iDAOyB;AANxB,iHAAA,gBAAgB,OAAA;AAChB,qHAAA,oBAAoB,OAAA;AACpB,gHAAA,eAAe,OAAA;AACf,oHAAA,mBAAmB,OAAA;AACnB,oHAAA,mBAAmB,OAAA;AACnB,qHAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DnsRecordType } from '../transport/dns-packet';
|
|
2
|
+
import type { DnsClientOptions, DnsServer, DnsServerResult } from '../transport/dns-client';
|
|
3
|
+
export type QueryFunction = (domain: string, recordType: DnsRecordType, server: DnsServer, options?: DnsClientOptions) => Promise<DnsServerResult>;
|
|
4
|
+
export interface WalkDelegationChainOptions {
|
|
5
|
+
recursiveResolver: DnsServer;
|
|
6
|
+
queryFn?: QueryFunction;
|
|
7
|
+
clientOptions?: DnsClientOptions;
|
|
8
|
+
}
|
|
9
|
+
export declare function walkDelegationChain(domain: string, options: WalkDelegationChainOptions): Promise<DnsServer[]>;
|