80 lines
2.2 KiB
TypeScript
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;
|
|
}
|
|
});
|