whois/server/api/dns.post.ts
2024-03-03 13:54:20 +08:00

80 lines
2.2 KiB
TypeScript

import dns from 'node:dns/promises';
// 定义 DNS 服务器配置
const dnsServers:any = {
google: 'https://dns.google/resolve',
cloudflare: 'http://1.1.1.1/dns-query',
aliyun: 'https://223.5.5.5/resolve',
tencent: 'https://doh.pub/dns-query',
};
interface Resp {
aRecords: string[];
nsRecords: string[];
soaRecord: soaRecord;
}
interface soaRecord {
nsname: string;
hostmaster: string;
serial: number;
refresh: number;
retry: number;
expire: number;
minttl: number;
}
export default defineEventHandler(async (event) => {
const body = await readBody(event);
const domain = body.domain;
const dnsServerKey = body.dnsServer;
switch (dnsServerKey) {
case 'google':
return await $fetch(dnsServers.google, {
params: {
name: domain,
type: 'A',
}
});
case 'tencent':
return await $fetch(dnsServers.tencent, {
params: {
name: domain,
type: 'A',
}
});
case 'cloudflare':
const resp = await $fetch(dnsServers.cloudflare, {
method: 'GET',
params: {
name: domain,
},
headers: {
"Accept": "application/dns-json", // 设置期望的响应数据类型
}
}).then((resp:any) => {
return resp.text()
})
return JSON.parse(resp);
case 'aliyun':
return await $fetch(dnsServers.aliyun, {
params: {
name: domain,
type: '1',
}
});
default:
const resolver = new dns.Resolver();
const aRecords = await resolver.resolve(domain, 'A');
const nsRecords = await resolver.resolve(domain, 'NS');
const soaRecord = await resolver.resolveSoa(domain);
return {
aRecords: aRecords,
nsRecords: nsRecords,
soaRecord: soaRecord,
} as Resp;
}
});