fcdns 0.3.1 → 0.3.4
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/lib/cli.js +91 -88
- package/lib/cli.js.map +1 -1
- package/lib/hostname-whitelist.js +17 -17
- package/lib/ip-whitelist.js +26 -26
- package/lib/resource-record-type.js +79 -79
- package/lib/router.js +81 -81
- package/lib/server.js +95 -116
- package/lib/server.js.map +1 -1
- package/lib/tester.js +56 -56
- package/lib/utils/create-dns-resolver.js +10 -10
- package/lib/utils/hostname-list-file.js +18 -18
- package/lib/utils/hostname-pattern.js +14 -14
- package/lib/utils/ip-list-file.js +43 -43
- package/lib/utils/is-alive.js +24 -24
- package/lib/utils/is-ipv4-address.js +7 -7
- package/lib/utils/is-ipv6-address.js +7 -7
- package/lib/utils/map-file.js +27 -27
- package/lib/utils/parse-log-level.js +15 -15
- package/lib/utils/parse-server-info.js +11 -11
- package/lib/utils/resolve-a.js +18 -18
- package/package.json +21 -20
- package/CHANGELOG.md +0 -79
- package/lib/logger.js +0 -68
- package/lib/logger.js.map +0 -1
- package/lib/utils/address-ranges-file.js +0 -48
- package/lib/utils/address-ranges-file.js.map +0 -1
- package/lib/utils/countup.js +0 -9
- package/lib/utils/countup.js.map +0 -1
- package/lib/utils/get-elapsed.js +0 -9
- package/lib/utils/get-elapsed.js.map +0 -1
- package/lib/utils/get-timestamp.js +0 -8
- package/lib/utils/get-timestamp.js.map +0 -1
- package/lib/utils/level-to-string.js +0 -16
- package/lib/utils/level-to-string.js.map +0 -1
- package/lib/whitelist.js +0 -31
- package/lib/whitelist.js.map +0 -1
package/lib/server.js
CHANGED
|
@@ -1,117 +1,96 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
-
};
|
|
24
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.startServer = void 0;
|
|
26
|
-
const router_1 = require("./router");
|
|
27
|
-
const dns = __importStar(require("native-dns"));
|
|
28
|
-
const extra_promise_1 = require("extra-promise");
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
server.on('
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
});
|
|
52
|
-
return [];
|
|
53
|
-
}
|
|
54
|
-
logger.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
.
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
question,
|
|
97
|
-
server: {
|
|
98
|
-
address: server.host,
|
|
99
|
-
port: server.port,
|
|
100
|
-
type: 'udp'
|
|
101
|
-
},
|
|
102
|
-
timeout: (0, ms_1.default)('30s'),
|
|
103
|
-
cache: false,
|
|
104
|
-
try_edns: true
|
|
105
|
-
});
|
|
106
|
-
request.on('timeout', () => reject());
|
|
107
|
-
request.on('cancelled', () => reject());
|
|
108
|
-
request.on('end', () => resolve(answers));
|
|
109
|
-
request.on('message', (err, msg) => {
|
|
110
|
-
if (err)
|
|
111
|
-
return reject(err);
|
|
112
|
-
msg.answer.forEach(answer => answers.push(answer));
|
|
113
|
-
});
|
|
114
|
-
request.send();
|
|
115
|
-
});
|
|
116
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.startServer = void 0;
|
|
26
|
+
const router_1 = require("./router");
|
|
27
|
+
const dns = __importStar(require("native-node-dns"));
|
|
28
|
+
const extra_promise_1 = require("extra-promise");
|
|
29
|
+
const resource_record_type_1 = require("./resource-record-type");
|
|
30
|
+
const return_style_1 = require("return-style");
|
|
31
|
+
const ms_1 = __importDefault(require("ms"));
|
|
32
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
33
|
+
function startServer({ logger, port, router, trustedServer, untrustedServer }) {
|
|
34
|
+
const server = dns.createServer();
|
|
35
|
+
server.on('error', console.error);
|
|
36
|
+
server.on('socketError', console.error);
|
|
37
|
+
server.on('request', async (req, res) => {
|
|
38
|
+
const answers = await (0, extra_promise_1.map)(req.question, async (question) => {
|
|
39
|
+
const startTime = Date.now();
|
|
40
|
+
var [err, target] = await (0, return_style_1.getErrorResultAsync)(() => router.getTarget(question.name));
|
|
41
|
+
if (err) {
|
|
42
|
+
logger.error(`${formatHostname(question.name)} ${err}`, getElapsed(startTime));
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
logger.debug(`${formatHostname(question.name)} ${router_1.Target[target]}`, getElapsed(startTime));
|
|
46
|
+
const server = target === router_1.Target.Trusted
|
|
47
|
+
? trustedServer
|
|
48
|
+
: untrustedServer;
|
|
49
|
+
var [err, answers] = await (0, return_style_1.getErrorResultAsync)(() => resolve(server, question));
|
|
50
|
+
if (err) {
|
|
51
|
+
logger.error(`${formatHostname(question.name)} ${err}`, getElapsed(startTime));
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
logger.info(`${formatHostname(question.name)} ${resource_record_type_1.ResourceRecordType[question.type]}`, getElapsed(startTime));
|
|
55
|
+
return answers;
|
|
56
|
+
});
|
|
57
|
+
answers
|
|
58
|
+
.flat()
|
|
59
|
+
.forEach(answer => res.answer.push(answer));
|
|
60
|
+
res.send();
|
|
61
|
+
});
|
|
62
|
+
return server.serve(port);
|
|
63
|
+
}
|
|
64
|
+
exports.startServer = startServer;
|
|
65
|
+
function resolve(server, question) {
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
const answers = [];
|
|
68
|
+
const request = dns.Request({
|
|
69
|
+
question,
|
|
70
|
+
server: {
|
|
71
|
+
address: server.host,
|
|
72
|
+
port: server.port,
|
|
73
|
+
type: 'udp'
|
|
74
|
+
},
|
|
75
|
+
timeout: (0, ms_1.default)('30s'),
|
|
76
|
+
cache: false,
|
|
77
|
+
try_edns: true
|
|
78
|
+
});
|
|
79
|
+
request.on('timeout', () => reject());
|
|
80
|
+
request.on('cancelled', () => reject());
|
|
81
|
+
request.on('end', () => resolve(answers));
|
|
82
|
+
request.on('message', (err, msg) => {
|
|
83
|
+
if (err)
|
|
84
|
+
return reject(err);
|
|
85
|
+
msg.answer.forEach(answer => answers.push(answer));
|
|
86
|
+
});
|
|
87
|
+
request.send();
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function formatHostname(hostname) {
|
|
91
|
+
return chalk_1.default.cyan(hostname);
|
|
92
|
+
}
|
|
93
|
+
function getElapsed(startTime) {
|
|
94
|
+
return Date.now() - startTime;
|
|
95
|
+
}
|
|
117
96
|
//# sourceMappingURL=server.js.map
|
package/lib/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/lib/tester.js
CHANGED
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ServerNotAlive = exports.Tester = void 0;
|
|
4
|
-
const map_file_1 = require("./utils/map-file");
|
|
5
|
-
const is_alive_1 = require("./utils/is-alive");
|
|
6
|
-
const create_dns_resolver_1 = require("./utils/create-dns-resolver");
|
|
7
|
-
const resolve_a_1 = require("./utils/resolve-a");
|
|
8
|
-
const errors_1 = require("@blackglory/errors");
|
|
9
|
-
const return_style_1 = require("return-style");
|
|
10
|
-
class Tester {
|
|
11
|
-
constructor(server, timeout, cacheFilename, testResolver, cache) {
|
|
12
|
-
this.server = server;
|
|
13
|
-
this.timeout = timeout;
|
|
14
|
-
this.cacheFilename = cacheFilename;
|
|
15
|
-
this.testResolver = testResolver;
|
|
16
|
-
this.cache = cache;
|
|
17
|
-
}
|
|
18
|
-
static async create(options) {
|
|
19
|
-
const server = options.server;
|
|
20
|
-
const timeout = options.timeout;
|
|
21
|
-
const cacheFilename = options.cacheFilename;
|
|
22
|
-
const testResolver = (0, create_dns_resolver_1.createDNSResolver)(server);
|
|
23
|
-
const cache = await (0, map_file_1.readMapFile)(cacheFilename);
|
|
24
|
-
await (0, map_file_1.writeMapFile)(cacheFilename, cache);
|
|
25
|
-
return new Tester(server, timeout, cacheFilename, testResolver, cache);
|
|
26
|
-
}
|
|
27
|
-
async isPoisoned(hostname) {
|
|
28
|
-
if (this.cache.has(hostname)) {
|
|
29
|
-
return this.cache.get(hostname);
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
const [alive, poisoned] = await Promise.all([
|
|
33
|
-
(0, is_alive_1.isAlive)(this.server, this.timeout),
|
|
34
|
-
(0, return_style_1.isSuccessPromise)((0, resolve_a_1.resolveA)(this.testResolver, hostname, this.timeout))
|
|
35
|
-
]);
|
|
36
|
-
if (alive) {
|
|
37
|
-
this.setCache(hostname, poisoned);
|
|
38
|
-
return poisoned;
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
throw new ServerNotAlive();
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
setCache(hostname, result) {
|
|
46
|
-
this.cache.set(hostname, result);
|
|
47
|
-
(0, map_file_1.appendMapFile)(this.cacheFilename, hostname, result);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
exports.Tester = Tester;
|
|
51
|
-
class ServerNotAlive extends errors_1.CustomError {
|
|
52
|
-
constructor() {
|
|
53
|
-
super('The test server is not alive or not sending a echo reply in time');
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
exports.ServerNotAlive = ServerNotAlive;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ServerNotAlive = exports.Tester = void 0;
|
|
4
|
+
const map_file_1 = require("./utils/map-file");
|
|
5
|
+
const is_alive_1 = require("./utils/is-alive");
|
|
6
|
+
const create_dns_resolver_1 = require("./utils/create-dns-resolver");
|
|
7
|
+
const resolve_a_1 = require("./utils/resolve-a");
|
|
8
|
+
const errors_1 = require("@blackglory/errors");
|
|
9
|
+
const return_style_1 = require("return-style");
|
|
10
|
+
class Tester {
|
|
11
|
+
constructor(server, timeout, cacheFilename, testResolver, cache) {
|
|
12
|
+
this.server = server;
|
|
13
|
+
this.timeout = timeout;
|
|
14
|
+
this.cacheFilename = cacheFilename;
|
|
15
|
+
this.testResolver = testResolver;
|
|
16
|
+
this.cache = cache;
|
|
17
|
+
}
|
|
18
|
+
static async create(options) {
|
|
19
|
+
const server = options.server;
|
|
20
|
+
const timeout = options.timeout;
|
|
21
|
+
const cacheFilename = options.cacheFilename;
|
|
22
|
+
const testResolver = (0, create_dns_resolver_1.createDNSResolver)(server);
|
|
23
|
+
const cache = await (0, map_file_1.readMapFile)(cacheFilename);
|
|
24
|
+
await (0, map_file_1.writeMapFile)(cacheFilename, cache);
|
|
25
|
+
return new Tester(server, timeout, cacheFilename, testResolver, cache);
|
|
26
|
+
}
|
|
27
|
+
async isPoisoned(hostname) {
|
|
28
|
+
if (this.cache.has(hostname)) {
|
|
29
|
+
return this.cache.get(hostname);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
const [alive, poisoned] = await Promise.all([
|
|
33
|
+
(0, is_alive_1.isAlive)(this.server, this.timeout),
|
|
34
|
+
(0, return_style_1.isSuccessPromise)((0, resolve_a_1.resolveA)(this.testResolver, hostname, this.timeout))
|
|
35
|
+
]);
|
|
36
|
+
if (alive) {
|
|
37
|
+
this.setCache(hostname, poisoned);
|
|
38
|
+
return poisoned;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
throw new ServerNotAlive();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
setCache(hostname, result) {
|
|
46
|
+
this.cache.set(hostname, result);
|
|
47
|
+
(0, map_file_1.appendMapFile)(this.cacheFilename, hostname, result);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.Tester = Tester;
|
|
51
|
+
class ServerNotAlive extends errors_1.CustomError {
|
|
52
|
+
constructor() {
|
|
53
|
+
super('The test server is not alive or not sending a echo reply in time');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.ServerNotAlive = ServerNotAlive;
|
|
57
57
|
//# sourceMappingURL=tester.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createDNSResolver = void 0;
|
|
4
|
-
const dns_1 = require("dns");
|
|
5
|
-
function createDNSResolver(...servers) {
|
|
6
|
-
const resolver = new dns_1.promises.Resolver();
|
|
7
|
-
resolver.setServers(servers);
|
|
8
|
-
return resolver;
|
|
9
|
-
}
|
|
10
|
-
exports.createDNSResolver = createDNSResolver;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDNSResolver = void 0;
|
|
4
|
+
const dns_1 = require("dns");
|
|
5
|
+
function createDNSResolver(...servers) {
|
|
6
|
+
const resolver = new dns_1.promises.Resolver();
|
|
7
|
+
resolver.setServers(servers);
|
|
8
|
+
return resolver;
|
|
9
|
+
}
|
|
10
|
+
exports.createDNSResolver = createDNSResolver;
|
|
11
11
|
//# sourceMappingURL=create-dns-resolver.js.map
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.readHostnameListFile = void 0;
|
|
4
|
-
const fs_1 = require("fs");
|
|
5
|
-
const hostname_pattern_1 = require("./hostname-pattern");
|
|
6
|
-
async function readHostnameListFile(filename) {
|
|
7
|
-
const text = await fs_1.promises.readFile(filename, 'utf-8');
|
|
8
|
-
const patterns = text.split('\n')
|
|
9
|
-
.map(x => x.trim())
|
|
10
|
-
.filter(x => x !== '')
|
|
11
|
-
.filter(isHostnamePattern)
|
|
12
|
-
.map(x => new hostname_pattern_1.HostnamePattern(x));
|
|
13
|
-
return patterns;
|
|
14
|
-
}
|
|
15
|
-
exports.readHostnameListFile = readHostnameListFile;
|
|
16
|
-
function isHostnamePattern(text) {
|
|
17
|
-
return /^[\da-zA-Z\-.*]+$/.test(text);
|
|
18
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readHostnameListFile = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const hostname_pattern_1 = require("./hostname-pattern");
|
|
6
|
+
async function readHostnameListFile(filename) {
|
|
7
|
+
const text = await fs_1.promises.readFile(filename, 'utf-8');
|
|
8
|
+
const patterns = text.split('\n')
|
|
9
|
+
.map(x => x.trim())
|
|
10
|
+
.filter(x => x !== '')
|
|
11
|
+
.filter(isHostnamePattern)
|
|
12
|
+
.map(x => new hostname_pattern_1.HostnamePattern(x));
|
|
13
|
+
return patterns;
|
|
14
|
+
}
|
|
15
|
+
exports.readHostnameListFile = readHostnameListFile;
|
|
16
|
+
function isHostnamePattern(text) {
|
|
17
|
+
return /^[\da-zA-Z\-.*]+$/.test(text);
|
|
18
|
+
}
|
|
19
19
|
//# sourceMappingURL=hostname-list-file.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HostnamePattern = void 0;
|
|
4
|
-
class HostnamePattern {
|
|
5
|
-
constructor(pattern) {
|
|
6
|
-
const re = pattern.replace(/\./g, '\\.')
|
|
7
|
-
.replace(/\*/g, '.*');
|
|
8
|
-
this.re = new RegExp(`^${re}$`, 'i');
|
|
9
|
-
}
|
|
10
|
-
match(hostname) {
|
|
11
|
-
return this.re.test(hostname);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
exports.HostnamePattern = HostnamePattern;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HostnamePattern = void 0;
|
|
4
|
+
class HostnamePattern {
|
|
5
|
+
constructor(pattern) {
|
|
6
|
+
const re = pattern.replace(/\./g, '\\.')
|
|
7
|
+
.replace(/\*/g, '.*');
|
|
8
|
+
this.re = new RegExp(`^${re}$`, 'i');
|
|
9
|
+
}
|
|
10
|
+
match(hostname) {
|
|
11
|
+
return this.re.test(hostname);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.HostnamePattern = HostnamePattern;
|
|
15
15
|
//# sourceMappingURL=hostname-pattern.js.map
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.readIPListFile = exports.writeIPListFile = void 0;
|
|
4
|
-
const fs_1 = require("fs");
|
|
5
|
-
const address_range_1 = require("address-range");
|
|
6
|
-
const is_ipv4_address_1 = require("./is-ipv4-address");
|
|
7
|
-
const is_ipv6_address_1 = require("./is-ipv6-address");
|
|
8
|
-
async function writeIPListFile(filename, ranges) {
|
|
9
|
-
await fs_1.promises.writeFile(filename, ranges.join('\n'));
|
|
10
|
-
}
|
|
11
|
-
exports.writeIPListFile = writeIPListFile;
|
|
12
|
-
async function readIPListFile(filename) {
|
|
13
|
-
const ipv4AddressRanges = [];
|
|
14
|
-
const ipv6AddressRanges = [];
|
|
15
|
-
const text = await fs_1.promises.readFile(filename, 'utf-8');
|
|
16
|
-
text.split('\n')
|
|
17
|
-
.filter(x => x.trim())
|
|
18
|
-
.filter(x => x !== '')
|
|
19
|
-
.forEach(x => {
|
|
20
|
-
if ((0, is_ipv4_address_1.isIPv4Address)(x)) {
|
|
21
|
-
ipv4AddressRanges.push(address_range_1.IPv4AddressRange.from(x, x));
|
|
22
|
-
}
|
|
23
|
-
if ((0, is_ipv6_address_1.isIPv6Address)(x)) {
|
|
24
|
-
ipv6AddressRanges.push(address_range_1.IPv6AddressRange.from(x, x));
|
|
25
|
-
}
|
|
26
|
-
if (isIPv4AddressRange(x)) {
|
|
27
|
-
const [startAddress, endAddress] = x.split('-');
|
|
28
|
-
ipv4AddressRanges.push(address_range_1.IPv4AddressRange.from(startAddress, endAddress));
|
|
29
|
-
}
|
|
30
|
-
if (isIPv6AddressRange(x)) {
|
|
31
|
-
const [startAddress, endAddress] = x.split('-');
|
|
32
|
-
ipv6AddressRanges.push(address_range_1.IPv6AddressRange.from(startAddress, endAddress));
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
return { ipv4: ipv4AddressRanges, ipv6: ipv6AddressRanges };
|
|
36
|
-
}
|
|
37
|
-
exports.readIPListFile = readIPListFile;
|
|
38
|
-
function isIPv4AddressRange(text) {
|
|
39
|
-
return /^[\d\.]+-[\d\.]+$/.test(text);
|
|
40
|
-
}
|
|
41
|
-
function isIPv6AddressRange(text) {
|
|
42
|
-
return /^[\da-f:]+-[\da-f:]+$/.test(text);
|
|
43
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readIPListFile = exports.writeIPListFile = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const address_range_1 = require("address-range");
|
|
6
|
+
const is_ipv4_address_1 = require("./is-ipv4-address");
|
|
7
|
+
const is_ipv6_address_1 = require("./is-ipv6-address");
|
|
8
|
+
async function writeIPListFile(filename, ranges) {
|
|
9
|
+
await fs_1.promises.writeFile(filename, ranges.join('\n'));
|
|
10
|
+
}
|
|
11
|
+
exports.writeIPListFile = writeIPListFile;
|
|
12
|
+
async function readIPListFile(filename) {
|
|
13
|
+
const ipv4AddressRanges = [];
|
|
14
|
+
const ipv6AddressRanges = [];
|
|
15
|
+
const text = await fs_1.promises.readFile(filename, 'utf-8');
|
|
16
|
+
text.split('\n')
|
|
17
|
+
.filter(x => x.trim())
|
|
18
|
+
.filter(x => x !== '')
|
|
19
|
+
.forEach(x => {
|
|
20
|
+
if ((0, is_ipv4_address_1.isIPv4Address)(x)) {
|
|
21
|
+
ipv4AddressRanges.push(address_range_1.IPv4AddressRange.from(x, x));
|
|
22
|
+
}
|
|
23
|
+
if ((0, is_ipv6_address_1.isIPv6Address)(x)) {
|
|
24
|
+
ipv6AddressRanges.push(address_range_1.IPv6AddressRange.from(x, x));
|
|
25
|
+
}
|
|
26
|
+
if (isIPv4AddressRange(x)) {
|
|
27
|
+
const [startAddress, endAddress] = x.split('-');
|
|
28
|
+
ipv4AddressRanges.push(address_range_1.IPv4AddressRange.from(startAddress, endAddress));
|
|
29
|
+
}
|
|
30
|
+
if (isIPv6AddressRange(x)) {
|
|
31
|
+
const [startAddress, endAddress] = x.split('-');
|
|
32
|
+
ipv6AddressRanges.push(address_range_1.IPv6AddressRange.from(startAddress, endAddress));
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
return { ipv4: ipv4AddressRanges, ipv6: ipv6AddressRanges };
|
|
36
|
+
}
|
|
37
|
+
exports.readIPListFile = readIPListFile;
|
|
38
|
+
function isIPv4AddressRange(text) {
|
|
39
|
+
return /^[\d\.]+-[\d\.]+$/.test(text);
|
|
40
|
+
}
|
|
41
|
+
function isIPv6AddressRange(text) {
|
|
42
|
+
return /^[\da-f:]+-[\da-f:]+$/.test(text);
|
|
43
|
+
}
|
|
44
44
|
//# sourceMappingURL=ip-list-file.js.map
|
package/lib/utils/is-alive.js
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isAlive = void 0;
|
|
4
|
-
const extra_promise_1 = require("extra-promise");
|
|
5
|
-
const ping_1 = require("ping");
|
|
6
|
-
const go_1 = require("@blackglory/go");
|
|
7
|
-
async function isAlive(address, timeoutMsecs) {
|
|
8
|
-
try {
|
|
9
|
-
const result = await Promise.race([
|
|
10
|
-
(0, go_1.go)(async () => {
|
|
11
|
-
const res = await ping_1.promise.probe(address);
|
|
12
|
-
return res.alive;
|
|
13
|
-
}),
|
|
14
|
-
(0, extra_promise_1.timeout)(timeoutMsecs)
|
|
15
|
-
]);
|
|
16
|
-
return result;
|
|
17
|
-
}
|
|
18
|
-
catch (e) {
|
|
19
|
-
if (e instanceof extra_promise_1.TimeoutError)
|
|
20
|
-
return false;
|
|
21
|
-
throw e;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
exports.isAlive = isAlive;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isAlive = void 0;
|
|
4
|
+
const extra_promise_1 = require("extra-promise");
|
|
5
|
+
const ping_1 = require("ping");
|
|
6
|
+
const go_1 = require("@blackglory/go");
|
|
7
|
+
async function isAlive(address, timeoutMsecs) {
|
|
8
|
+
try {
|
|
9
|
+
const result = await Promise.race([
|
|
10
|
+
(0, go_1.go)(async () => {
|
|
11
|
+
const res = await ping_1.promise.probe(address);
|
|
12
|
+
return res.alive;
|
|
13
|
+
}),
|
|
14
|
+
(0, extra_promise_1.timeout)(timeoutMsecs)
|
|
15
|
+
]);
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
if (e instanceof extra_promise_1.TimeoutError)
|
|
20
|
+
return false;
|
|
21
|
+
throw e;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.isAlive = isAlive;
|
|
25
25
|
//# sourceMappingURL=is-alive.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isIPv4Address = void 0;
|
|
4
|
-
function isIPv4Address(text) {
|
|
5
|
-
return /^[\d\.]+$/.test(text);
|
|
6
|
-
}
|
|
7
|
-
exports.isIPv4Address = isIPv4Address;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isIPv4Address = void 0;
|
|
4
|
+
function isIPv4Address(text) {
|
|
5
|
+
return /^[\d\.]+$/.test(text);
|
|
6
|
+
}
|
|
7
|
+
exports.isIPv4Address = isIPv4Address;
|
|
8
8
|
//# sourceMappingURL=is-ipv4-address.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isIPv6Address = void 0;
|
|
4
|
-
function isIPv6Address(text) {
|
|
5
|
-
return /^[\da-f:]+$/.test(text);
|
|
6
|
-
}
|
|
7
|
-
exports.isIPv6Address = isIPv6Address;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isIPv6Address = void 0;
|
|
4
|
+
function isIPv6Address(text) {
|
|
5
|
+
return /^[\da-f:]+$/.test(text);
|
|
6
|
+
}
|
|
7
|
+
exports.isIPv6Address = isIPv6Address;
|
|
8
8
|
//# sourceMappingURL=is-ipv6-address.js.map
|