@nodesecure/tarball
Version:
NodeSecure tarball scanner
45 lines • 1.36 kB
JavaScript
// 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