domainlooker
Version:
🕵️ Mission-critical domain intelligence gathering tool with spy-themed interface. Comprehensive WHOIS, DNS, SSL, network analysis, subdomain discovery, and API-ready JSON exports.
105 lines • 3.52 kB
JavaScript
import { promises as dns } from 'dns';
export class DNSService {
async lookup(domain) {
const result = {};
try {
// Execute all DNS queries in parallel
const dnsPromises = [
this.getARecords(domain),
this.getAAAARecords(domain),
this.getMXRecords(domain),
this.getNSRecords(domain),
this.getTXTRecords(domain),
this.getSOARecord(domain)
];
const dnsResults = await Promise.allSettled(dnsPromises);
// Process A Records
if (dnsResults[0].status === 'fulfilled' && dnsResults[0].value && Array.isArray(dnsResults[0].value) && dnsResults[0].value.length > 0) {
result.a = dnsResults[0].value;
}
// Process AAAA Records
if (dnsResults[1].status === 'fulfilled' && dnsResults[1].value && Array.isArray(dnsResults[1].value) && dnsResults[1].value.length > 0) {
result.aaaa = dnsResults[1].value;
}
// Process MX Records
if (dnsResults[2].status === 'fulfilled' && dnsResults[2].value && Array.isArray(dnsResults[2].value) && dnsResults[2].value.length > 0) {
result.mx = dnsResults[2].value;
}
// Process NS Records
if (dnsResults[3].status === 'fulfilled' && dnsResults[3].value && Array.isArray(dnsResults[3].value) && dnsResults[3].value.length > 0) {
result.ns = dnsResults[3].value;
}
// Process TXT Records
if (dnsResults[4].status === 'fulfilled' && dnsResults[4].value && Array.isArray(dnsResults[4].value) && dnsResults[4].value.length > 0) {
result.txt = dnsResults[4].value;
}
// Process SOA Record
if (dnsResults[5].status === 'fulfilled' && dnsResults[5].value && !Array.isArray(dnsResults[5].value)) {
result.soa = dnsResults[5].value;
}
}
catch (error) {
console.error('DNS lookup error:', error);
}
return result;
}
async getARecords(domain) {
try {
return await dns.resolve4(domain);
}
catch {
return [];
}
}
async getAAAARecords(domain) {
try {
return await dns.resolve6(domain);
}
catch {
return [];
}
}
async getMXRecords(domain) {
try {
return await dns.resolveMx(domain);
}
catch {
return [];
}
}
async getNSRecords(domain) {
try {
return await dns.resolveNs(domain);
}
catch {
return [];
}
}
async getTXTRecords(domain) {
try {
const records = await dns.resolveTxt(domain);
return records.map(record => record.join(''));
}
catch {
return [];
}
}
async getSOARecord(domain) {
try {
const soa = await dns.resolveSoa(domain);
return {
primary: soa.nsname,
admin: soa.hostmaster,
serial: soa.serial,
refresh: soa.refresh,
retry: soa.retry,
expiration: soa.expire,
minimum: soa.minttl
};
}
catch {
return undefined;
}
}
}
//# sourceMappingURL=dns.js.map