2025-01-07 18:19:25 +08:00

107 lines
2.4 KiB
JavaScript

const dns = require("dns");
const { promisify } = require("util");
// 将回调函数转换为 Promise
const lookup = promisify(dns.lookup);
const resolve = promisify(dns.resolve);
const resolve4 = promisify(dns.resolve4);
const resolve6 = promisify(dns.resolve6);
const resolveMx = promisify(dns.resolveMx);
const resolveTxt = promisify(dns.resolveTxt);
const resolveNs = promisify(dns.resolveNs);
const resolveCname = promisify(dns.resolveCname);
const reverse = promisify(dns.reverse);
// 解析主机名
async function lookupHost(hostname, family = 0, all = false) {
try {
return await lookup(hostname, { family, all });
} catch (error) {
throw new Error(`DNS查询失败: ${error.message}`);
}
}
// 解析所有记录
async function resolveAll(hostname) {
try {
return await resolve(hostname);
} catch (error) {
throw new Error(`DNS解析失败: ${error.message}`);
}
}
// 解析 IPv4 地址
async function resolveIpv4(hostname) {
try {
return await resolve4(hostname);
} catch (error) {
throw new Error(`IPv4解析失败: ${error.message}`);
}
}
// 解析 IPv6 地址
async function resolveIpv6(hostname) {
try {
return await resolve6(hostname);
} catch (error) {
throw new Error(`IPv6解析失败: ${error.message}`);
}
}
// 解析 MX 记录
async function resolveMxRecords(hostname) {
try {
return await resolveMx(hostname);
} catch (error) {
throw new Error(`MX记录解析失败: ${error.message}`);
}
}
// 解析 TXT 记录
async function resolveTxtRecords(hostname) {
try {
return await resolveTxt(hostname);
} catch (error) {
throw new Error(`TXT记录解析失败: ${error.message}`);
}
}
// 解析 NS 记录
async function resolveNsRecords(hostname) {
try {
return await resolveNs(hostname);
} catch (error) {
throw new Error(`NS记录解析失败: ${error.message}`);
}
}
// 解析 CNAME 记录
async function resolveCnameRecords(hostname) {
try {
return await resolveCname(hostname);
} catch (error) {
throw new Error(`CNAME记录解析失败: ${error.message}`);
}
}
// 反向解析 IP 地址
async function reverseResolve(ip) {
try {
return await reverse(ip);
} catch (error) {
throw new Error(`反向解析失败: ${error.message}`);
}
}
module.exports = {
lookupHost,
resolveAll,
resolveIpv4,
resolveIpv6,
resolveMxRecords,
resolveTxtRecords,
resolveNsRecords,
resolveCnameRecords,
reverseResolve,
};