+
+ @submit="handleAction('whois')">
@@ -86,28 +109,8 @@ const timeStore = useTimeStore()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/layouts/result.vue b/layouts/result.vue
deleted file mode 100644
index 9ad6aa1..0000000
--- a/layouts/result.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 07ddaaf..d6d78fd 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -2,12 +2,19 @@
export default defineNuxtConfig({
devtools: { enabled: true },
modules: [
+ '@nuxt/devtools',
'@nuxt/ui',
'@nuxtjs/i18n',
'nuxt-headlessui',
'@pinia/nuxt', // needed
'@pinia-plugin-persistedstate/nuxt',
],
+ runtimeConfig: {
+ public: {
+ Domain: 'Nuxt Whois',
+ DomainSuffix: 'Dns',
+ }
+ },
app:{
head: {
title: 'Nuxt Whois',
diff --git a/pages/dns/[domain].html.vue b/pages/dns/[domain].html.vue
new file mode 100644
index 0000000..f59d1a6
--- /dev/null
+++ b/pages/dns/[domain].html.vue
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
DNS查询结果
+
+
+
A记录
+
+
+ -
+ IP:
+ {{ record.Record }}
+ TTL: {{ record.TTL }}
+
+
+
+
+
+
NS记录
+
+
+ -
+ {{ record.Record }}
+ TTL: {{ record.TTL }}
+
+
+
+
+
+
SOA记录
+
+
+ - MName: {{ data.SOA.MName }}
+ - Email: {{ data.SOA.Email }}
+ - Serial: {{ data.SOA.Serial }}
+ - Refresh: {{ data.SOA.Refresh }}
+ - Retry: {{ data.SOA.Retry }}
+ - Expire: {{ data.SOA.Expire }}
+ - Minimum TTL: {{ data.SOA.MinimumTTL }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('error.notFound') }}
+
+
+
+
+
+
diff --git a/pages/index.vue b/pages/index.vue
index 85af715..efcdad6 100644
--- a/pages/index.vue
+++ b/pages/index.vue
@@ -1,5 +1,8 @@
diff --git a/pages/result/[domain].html.vue b/pages/whois/[domain].html.vue
similarity index 96%
rename from pages/result/[domain].html.vue
rename to pages/whois/[domain].html.vue
index 062fc32..9b31553 100644
--- a/pages/result/[domain].html.vue
+++ b/pages/whois/[domain].html.vue
@@ -2,10 +2,8 @@
import {ParseWhois} from "~/utils/whoisToJson";
import {AdjustTimeToUTCOffset} from "~/utils/utc";
import {useTimeStore} from "~/stores/time";
+import {useStyleStore} from "~/stores/style";
-definePageMeta({
- layout: 'result',
-})
const route = useRoute();
const {domain} = route.params;
@@ -24,7 +22,8 @@ const {data, pending, error, refresh} = await useAsyncData(
const parsedInfo = ParseWhois(data.value);
const showRawData = ref(false);
const timeStore = useTimeStore()
-
+const styleStore = useStyleStore()
+styleStore.setIsPage(true)
useHead({
title: `${domainData} - ${t('result.title')}`,
meta: [
@@ -39,7 +38,6 @@ useHead({
@@ -105,7 +103,7 @@ useHead({
-
+
{{ t('error.notFound') }}
diff --git a/server/api/dns.post.ts b/server/api/dns.post.ts
new file mode 100644
index 0000000..e0b73dc
--- /dev/null
+++ b/server/api/dns.post.ts
@@ -0,0 +1,31 @@
+import dns from 'node:dns/promises';
+export default defineEventHandler(async (event) => {
+ const body = await readBody(event)
+
+ const domain = body.domain;
+ if (!domain) {
+ return { error: 'Missing domain' };
+ }
+ try {
+ const aRecords = await dns.resolve(domain, 'A');
+ const nsRecords = await dns.resolve(domain, 'NS');
+ const soaRecord = await dns.resolveSoa(domain);
+
+ return {
+ A: aRecords.map(ip => ({ TTL: '600', Record: ip })), // 示例中的TTL是假设的
+ NS: nsRecords.map(ns => ({ TTL: '21600', Record: ns })), // 示例中的TTL是假设的
+ SOA: {
+ MName: soaRecord.nsname,
+ Email: soaRecord.hostmaster,
+ Serial: soaRecord.serial,
+ Refresh: soaRecord.refresh,
+ Retry: soaRecord.retry,
+ Expire: soaRecord.expire,
+ MinimumTTL: soaRecord.minttl,
+ }
+ };
+ } catch (error) {
+ console.error(`Error fetching DNS records for ${domain}:`, error);
+ return { error: 'Failed to fetch DNS records' };
+ }
+})
diff --git a/stores/style.ts b/stores/style.ts
new file mode 100644
index 0000000..8beab30
--- /dev/null
+++ b/stores/style.ts
@@ -0,0 +1,14 @@
+import { defineStore } from 'pinia'
+
+export const useStyleStore = defineStore('style', {
+ state: () => {
+ return {
+ isPage: true,
+ }
+ },
+ actions: {
+ setIsPage(isPage: boolean) {
+ this.isPage = isPage
+ },
+ },
+})
diff --git a/utils/domain.ts b/utils/domain.ts
index 1fbb842..5881ccb 100644
--- a/utils/domain.ts
+++ b/utils/domain.ts
@@ -1,3 +1,6 @@
// br.com,cn.com,de.com,eu.com,gb.com,gb.net,gr.com,hu.com,in.net,no.com,qc.com,ru.com,sa.com,se.com,se.net,uk.com,uk.net,us.com,uy.com,za.com,jpn.com,web.com,com,za.net,net,eu.org,za.org,org,llyw.cymru,gov.scot,gov.wales,edu,gov,int,e164.arpa,arpa,aero,asia,biz,cat,coop,info,jobs,mobi,museum,name,post,pro,tel,travel,xxx,ac,ae,af,ag,ai,am,ar,as,priv.at,at,au,aw,ax,be,bf,bg,bh,bi,bj,bm,bn,bo,br,by,bw,bz,co.ca,ca,cc,cd,ch,ci,cl,cm,edu.cn,cn,uk.co,co,cr,cx,cz,de,dk,dm,do,dz,ec,ee,eu,fi,fj,fm,fo,fr,gd,ge,gf,gg,gh,gi,gl,gp,gq,gs,gy,hk,hm,hn,hr,ht,hu,id,ie,il,im,in,io,iq,ir,is,it,je,jp,ke,kg,ki,kn,kr,kw,ky,kz,la,lb,lc,li,lk,ls,lt,lu,lv,ly,ma,md,me,mg,mk,ml,mm,mn,mq,mr,ms,mt,mu,mw,mx,my,mz,na,nc,nf,ng,nl,no,nu,nz,om,pe,pf,pk,co.pl,pl,pm,pr,ps,pt,pw,qa,re,ro,rs,ac.ru,edu.ru,com.ru,msk.ru,net.ru,nov.ru,org.ru,pp.ru,spb.ru,ru,rw,sa,sb,sc,sd,se,sg,sh,si,sk,sl,sm,sn,so,ss,st,msk.su,nov.su,spb.su,su,sx,sy,tc,td,tf,tg,th,tk,tl,tm,tn,to,tr,tv,tw,tz,biz.ua,co.ua,pp.ua,ua,ug,ac.uk,gov.uk,uk,fed.us,us,uy,uz,vc,ve,vg,vu,wf,ws,yt,ac.za,co.za,gov.za,net.za,org.za,web.za,zm,xn--2scrj9c,xn--3e0b707e,xn--3hcrj9c,xn--45br5cyl,xn--45brj9c,xn--4dbrk0ce,xn--80ao21a,xn--90a3ac,xn--90ae,xn--90ais,xn--clchc0ea0b2g2a9gcd,xn--d1alf,xn--e1a4c,xn--fiqs8s,xn--fiqz9s,xn--fpcrj9c3d,xn--fzc2c9e2c,xn--gecrj9c,xn--h2breg3eve,xn--h2brj9c8c,xn--h2brj9c,xn--j1amh,xn--j6w193g,xn--kprw13d,xn--kpry57d,xn--lgbbat1ad8j,xn--mgb9awbf,xn--mgba3a4f16a,xn--mgbaam7a8h,xn--mgbah1a3hjkrd,xn--mgbbh1a71e,xn--mgbbh1a,xn--mgberp4a5d4ar,xn--mgbgu82a,xn--mgbtx2b,xn--mgbx4cd0ab,xn--node,xn--o3cw4h,xn--ogbpf8fl,xn--p1ai,xn--pgbs0dh,xn--q7ce6a,xn--qxa6a,xn--rvc1e0am3e,xn--s9brj9c,xn--wgbh1c,xn--wgbl6a,xn--xkc2al3hye2a,xn--xkc2dl3a5ee0h,xn--y9a3aq,xn--yfro4i67o,xn--ygbi2ammx
export const SupportedTLDs = new Set(["br.com", "cn.com", "de.com", "eu.com", "gb.com", "gb.net", "gr.com", "hu.com", "in.net", "no.com", "qc.com", "ru.com", "sa.com", "se.com", "se.net", "uk.com", "uk.net", "us.com", "uy.com", "za.com", "jpn.com", "web.com", "com", "za.net", "net", "eu.org", "za.org", "org", "llyw.cymru", "gov.scot", "gov.wales", "edu", "gov", "int", "e164.arpa", "arpa", "aero", "asia", "biz", "cat", "coop", "info", "jobs", "mobi", "museum", "name", "post", "pro", "tel", "travel", "xxx", "ac", "ae", "af", "ag", "ai", "am", "ar", "as", "priv.at", "at", "au", "aw", "ax", "be", "bf", "bg", "bh", "bi", "bj", "bm", "bn", "bo", "br", "by", "bw", "bz", "co.ca", "ca", "cc", "cd", "ch", "ci", "cl", "cm", "edu.cn", "cn", "uk.co", "co", "cr", "cx", "cz", "de", "dk", "dm", "do", "dz", "ec", "ee", "eu", "fi", "fj", "fm", "fo", "fr", "gd", "ge", "gf", "gg", "gh", "gi", "gl", "gp", "gq", "gs", "gy", "hk", "hm", "hn", "hr", "ht", "hu", "id", "ie", "il", "im", "in", "io", "iq", "ir", "is", "it", "je", "jp", "ke", "kg", "ki", "kn", "kr", "kw", "ky", "kz", "la", "lb", "lc", "li", "lk", "ls", "lt", "lu", "lv", "ly", "ma", "md", "me", "mg", "mk", "ml", "mm", "mn", "mq", "mr", "ms", "mt", "mu", "mw", "mx", "my", "mz", "na", "nc", "nf", "ng", "nl", "no", "nu", "nz", "om", "pe", "pf", "pk", "co.pl", "pl", "pm", "pr", "ps", "pt", "pw", "qa", "re", "ro", "rs", "ac.ru", "edu.ru", "com.ru", "msk.ru", "net.ru", "nov.ru", "org.ru", "pp.ru", "spb.ru", "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg", "sh", "si", "sk", "sl", "sm", "sn", "so", "ss", "st", "msk.su", "nov.su", "spb.su", "su", "sx", "sy", "tc", "td", "tf", "tg", "th", "tk", "tl", "tm", "tn", "to", "tr", "tv", "tw", "tz", "biz.ua", "co.ua", "pp.ua", "ua", "ug", "ac.uk", "gov.uk", "uk", "fed.us", "us", "uy", "uz", "vc", "ve", "vg", "vu", "wf", "ws", "yt", "ac.za", "co.za", "gov.za", "net.za", "org.za", "web.za", "zm", "xn--2scrj9c", "xn--3e0b707e", "xn--3hcrj9c", "xn--45br5cyl", "xn--45brj9c", "xn--4dbrk0ce", "xn--80ao21a", "xn--90a3ac", "xn--90ae", "xn--90ais", "xn--clchc0ea0b2g2a9gcd", "xn--d1alf", "xn--e1a4c", "xn--fiqs8s", "xn--fiqz9s", "xn--fpcrj9c3d", "xn--fzc2c9e2c", "xn--gecrj9c", "xn--h2breg3eve", "xn--h2brj9c8c", "xn--h2brj9c", "xn--j1amh", "xn--j6w193g", "xn--kprw13d", "xn--kpry57d", "xn--lgbbat1ad8j", "xn--mgb9awbf", "xn--mgba3a4f16a", "xn--mgbaam7a8h", "xn--mgbah1a3hjkrd", "xn--mgbbh1a71e", "xn--mgbbh1a", "xn--mgberp4a5d4ar", "xn--mgbgu82a", "xn--mgbtx2b", "xn--mgbx4cd0ab", "xn--node", "xn--o3cw4h", "xn--ogbpf8fl", "xn--p1ai", "xn--pgbs0dh", "xn--q7ce6a", "xn--qxa6a", "xn--rvc1e0am3e", "xn--s9brj9c", "xn--wgbh1c", "xn--wgbl6a", "xn--xkc2al3hye2a", "xn--xkc2dl3a5ee0h", "xn--y9a3aq", "xn--yfro4i67o", "xn--ygbi2ammx"]);
+
+
+