UNPKG

@nodesecure/tarball

Version:
45 lines 1.36 kB
// Import Node.js Dependencies import { resolve4, resolve6 } from "node:dns/promises"; // Import Third-party Dependencies import ipaddress from "ipaddr.js"; async function lookupAll(hostname) { const ips = await Promise.allSettled([ resolve4(hostname), resolve6(hostname) ]); const ipv4 = ips[0].status === "fulfilled" ? ips[0].value : []; const ipv6 = ips[1].status === "fulfilled" ? ips[1].value : []; return [...ipv4, ...ipv6]; } export class DnsResolver { #memo = new Map(); #lookup; constructor(lookup) { this.#lookup = lookup ?? lookupAll; } async isPrivateHost(hostname) { if (this.#memo.has(hostname)) { return this.#memo.get(hostname); } const ipAddressList = await this.#lookup(hostname); const isPrivate = ipAddressList.some(this.#isPrivateIPAddress); this.#memo.set(hostname, isPrivate); return isPrivate; } #isPrivateIPAddress(ipAddress) { let ip = ipaddress.parse(ipAddress); if (ip instanceof ipaddress.IPv6 && ip.isIPv4MappedAddress()) { ip = ip.toIPv4Address(); } const range = ip.range(); if (range !== "unicast") { return true; } return false; } } //# sourceMappingURL=DnsResolver.class.js.map