UNPKG

js-reverse-dns-ip-filter

Version:
57 lines (47 loc) 1.55 kB
const { promises:dnsPromises } = require("dns"); const dico = new Map(); const resolveFQDN = async (addr = '', seekIp = '', useCache = false) => { const domains = await dnsPromises.resolveSrv('*.' + addr); let ips = []; if (useCache) { const promises = []; for (const domain of domains) { if (dico.has(domain.name)) { ips.push(dico.get(domain.name)); } else { const pending = dnsPromises.lookup(domain.name) .then(ip => { dico.set(domain.name, ip); return ip; }); promises.push(pending); } } ips = ips.concat(await Promise.all(promises)); } else { ips = await Promise.all(domains.map(d => dnsPromises.lookup(d.name))); } for (const { address } of ips) { if (address.includes(seekIp)) { return true; } } return false; }; const search = async (ip, seekIp, useCache = true) => { let addresses; if (useCache) { if (!dico.has(ip)) { dico.set(ip, await dnsPromises.reverse(ip)); } addresses = dico.get(ip); } else { addresses = await dnsPromises.reverse(ip); } const promises = []; for (const addr of addresses) { promises.push(resolveFQDN(addr, seekIp, useCache)); } const results = await Promise.all(promises); return results.includes(true); }; module.exports = { search };