whois/server/api/resolve.post.ts
2024-03-25 06:55:06 +08:00

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;
}
});