62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
// server/api/dns-query.ts
|
|
import {resolve4} from 'dns/promises';
|
|
|
|
interface DNSQueryResponse {
|
|
Status: number;
|
|
TC: boolean;
|
|
RD: boolean;
|
|
RA: boolean;
|
|
AD: boolean;
|
|
CD: boolean;
|
|
Question: {
|
|
name: string;
|
|
type: number;
|
|
};
|
|
Answer?: Array<{
|
|
name: string;
|
|
TTL: number;
|
|
type: number;
|
|
data: string;
|
|
}>;
|
|
message?: string;
|
|
}
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const body = await readBody(event);
|
|
const queryName: string = body.name // 如果请求体中没有提供域名,默认查询 'baidu.com'
|
|
|
|
try {
|
|
const addresses: string[] = await resolve4(queryName);
|
|
const answers = addresses.map((address) => ({
|
|
name: `${queryName}.`,
|
|
TTL: 269, // 示例中的 TTL 值是硬编码的
|
|
type: 1, // 表示 A 记录
|
|
data: address,
|
|
}));
|
|
|
|
const response: DNSQueryResponse = {
|
|
Status: 0,
|
|
TC: false,
|
|
RD: true,
|
|
RA: true,
|
|
AD: false,
|
|
CD: false,
|
|
Question: {
|
|
name: `${queryName}.`,
|
|
type: 1,
|
|
},
|
|
Answer: answers,
|
|
};
|
|
|
|
return response;
|
|
} catch (error) {
|
|
console.error(error);
|
|
const response: DNSQueryResponse = {
|
|
AD: false, CD: false, Question: {name: "", type: 0}, RA: false, RD: false, TC: false,
|
|
Status: 2, // 使用 2 表示错误状态
|
|
message: 'DNS query failed'
|
|
};
|
|
return response;
|
|
}
|
|
});
|