最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用JS實(shí)現(xiàn)在線域名DNS查詢(xún)工具

 更新時(shí)間:2026年03月16日 09:59:39   作者:滕青山博客  
本文介紹了本項(xiàng)目中域名DNS查詢(xún)工具的功能實(shí)現(xiàn),使用Vue組織交互狀態(tài),通過(guò)DoH查詢(xún)DNS記錄,并將結(jié)果整理成可展示的表格數(shù)據(jù),核心功能包括輸入規(guī)范化、查詢(xún)觸發(fā)、結(jié)果渲染等,并詳細(xì)描述了前端和后端的處理邏輯,需要的朋友可以參考下

這篇文章只講本項(xiàng)目里域名DNS查詢(xún)工具的功能 JS 實(shí)現(xiàn)。整個(gè)工具用 Vue 組織交互狀態(tài),查詢(xún)端走 DoH(DNS over HTTPS),最終把 DNS 記錄整理成可直接展示的表格數(shù)據(jù)。

核心鏈路很簡(jiǎn)單:

輸入域名 -> 規(guī)范化與校驗(yàn) -> 發(fā)起查詢(xún) -> 解析應(yīng)答 -> 渲染記錄

在線工具網(wǎng)址:https://see-tool.com/dns-query
工具截圖:

1)輸入先做規(guī)范化,避免臟數(shù)據(jù)進(jìn)入查詢(xún)

前端不會(huì)直接拿輸入框原值查詢(xún),而是先做統(tǒng)一處理:轉(zhuǎn)小寫(xiě)、去協(xié)議、去路徑、去端口、去結(jié)尾點(diǎn)。

const normalizeDomain = (value) => {
  const rawValue = String(value || "")
    .trim()
    .toLowerCase();
  if (!rawValue) return "";
  let cleaned = rawValue.replace(/^https?:\/\//i, "");
  cleaned = cleaned.split("/")[0].split("?")[0].split("#")[0];
  if (cleaned.includes(":")) cleaned = cleaned.split(":")[0];
  return cleaned.replace(/\.$/, "");
};

const isValidDomain = (value) => {
  if (!value || !value.includes(".")) return false;
  return /^[a-z0-9.-]+$/i.test(value);
};

這一步把 https://Example.com:443/path 統(tǒng)一成 example.com,后續(xù)請(qǐng)求參數(shù)會(huì)穩(wěn)定很多。

2)前端狀態(tài)圍繞“一次查詢(xún)”組織

在 Vue 里,核心狀態(tài)包括:

  • domainInput:用戶(hù)輸入
  • recordType:記錄類(lèi)型(默認(rèn) 1,即 A)
  • dohServer:DoH 服務(wù)商(默認(rèn) alidns
  • isLoading:查詢(xún)中狀態(tài)
  • resultRecords、resultDomain:結(jié)果數(shù)據(jù)

觸發(fā)查詢(xún)時(shí)會(huì)先清空舊結(jié)果,再發(fā)請(qǐng)求;請(qǐng)求完成后根據(jù)返回值決定展示記錄表格還是“無(wú)記錄”提示。Enter 鍵和按鈕點(diǎn)擊共用同一套查詢(xún)函數(shù),交互邏輯保持一致。

3)服務(wù)端對(duì)域名再做一次標(biāo)準(zhǔn)化和校驗(yàn)

后端會(huì)再次處理輸入,保證接口層數(shù)據(jù)安全、可控。這里做了兩件事:

  1. 允許傳入帶協(xié)議或帶路徑的字符串,并用 URL 做兜底解析
  2. 校驗(yàn)域名格式,不合法直接返回錯(cuò)誤

同時(shí)接口只接受 POST,并把錯(cuò)誤按類(lèi)型轉(zhuǎn)成明確的狀態(tài)碼,前端可以直接按 message 展示。

4)DoH 查詢(xún)的核心是“服務(wù)映射 + 類(lèi)型映射”

工具內(nèi)部先定義兩張映射表:

  • DoH 服務(wù)商映射:alidns、dnspod、360、google、cloudflare
  • DNS 類(lèi)型映射:1(A)、28(AAAA)、5(CNAME)16(TXT)、2(NS)、6(SOA)

查詢(xún)時(shí)先檢查映射是否存在,不存在直接拋出 INVALID_DOHINVALID_TYPE,避免發(fā)出無(wú)效請(qǐng)求。

const requestUrl = `${server.url}?name=${encodeURIComponent(name)}&type=${encodeURIComponent(typeKey)}`;
const response = await fetchWithTimeout(
  requestUrl,
  {
    method: "GET",
    headers: { Accept: "application/dns-json" },
  },
  10000,
);

這里統(tǒng)一用超時(shí)封裝后的請(qǐng)求函數(shù),避免上游響應(yīng)異常時(shí)長(zhǎng)時(shí)間卡住。

5)把 DoH 原始應(yīng)答轉(zhuǎn)換成頁(yè)面可用結(jié)構(gòu)

DoH 返回里真正要展示的是 Answer 數(shù)組。實(shí)現(xiàn)里會(huì)做一次輕量轉(zhuǎn)換:保留原字段,同時(shí)補(bǔ)一個(gè) typename,把數(shù)字類(lèi)型改成可讀字符串。

const parseAnswerList = (data) => {
  if (!data || !Array.isArray(data.Answer)) return [];
  return data.Answer.map((row) => ({
    ...row,
    typename: DNS_TYPES[String(row.type)] || String(row.type),
  }));
};

這樣前端渲染時(shí)可以直接顯示:主機(jī)名、類(lèi)型、記錄值、TTL,不需要再做二次轉(zhuǎn)換。

6)錯(cuò)誤處理按“可定位”設(shè)計(jì)

這套實(shí)現(xiàn)把錯(cuò)誤分成幾類(lèi):

  • 參數(shù)錯(cuò)誤:如類(lèi)型非法、DoH 非法
  • 上游響應(yīng)錯(cuò)誤:如返回體不是合法 JSON
  • 請(qǐng)求失?。荷嫌尾豢蛇_(dá)或超時(shí)

接口會(huì)返回統(tǒng)一結(jié)構(gòu),前端只需要讀取 statusmessage 就能完成提示。

7)這套功能 JS 的關(guān)鍵點(diǎn)

這個(gè)工具的核心不在“把 DNS 查出來(lái)”本身,而在于把查詢(xún)鏈路標(biāo)準(zhǔn)化:輸入規(guī)范化、參數(shù)校驗(yàn)、DoH 請(qǐng)求、應(yīng)答轉(zhuǎn)換、結(jié)果直出。對(duì)用戶(hù)來(lái)說(shuō)是一次點(diǎn)擊;對(duì)實(shí)現(xiàn)來(lái)說(shuō)是一條清晰的數(shù)據(jù)處理流水線。

以上就是利用JS實(shí)現(xiàn)在線域名DNS查詢(xún)工具的詳細(xì)內(nèi)容,更多關(guān)于JS在線域名DNS查詢(xún)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JavaScript獲得url所有參數(shù)鍵值表的方法

    JavaScript獲得url所有參數(shù)鍵值表的方法

    這篇文章主要介紹了JavaScript獲得url所有參數(shù)鍵值表的方法,實(shí)例分析了javascript操作URL的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • JS打字效果的動(dòng)態(tài)菜單代碼分享

    JS打字效果的動(dòng)態(tài)菜單代碼分享

    這篇文章主要介紹了JS打字效果的動(dòng)態(tài)菜單,推薦給大家,有需要的小伙伴可以參考下。
    2015-08-08
  • 讓innerText在firefox火狐和IE瀏覽器都能用的寫(xiě)法

    讓innerText在firefox火狐和IE瀏覽器都能用的寫(xiě)法

    下面的代碼主要是用來(lái)解決firefox瀏覽器不支持innerText的問(wèn)題,需要的朋友可以參考下。
    2011-05-05
  • jquery實(shí)現(xiàn)左右滑動(dòng)式輪播圖

    jquery實(shí)現(xiàn)左右滑動(dòng)式輪播圖

    這篇文章主要為大家詳細(xì)介紹了jquery實(shí)現(xiàn)左右滑動(dòng)式輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 原生Javascript和jQuery做輪播圖簡(jiǎn)單例子

    原生Javascript和jQuery做輪播圖簡(jiǎn)單例子

    這篇文章主要為大家詳細(xì)介紹了原生Javascript和jQuery做輪播圖簡(jiǎn)單例子,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 原生JS 實(shí)現(xiàn)的input輸入時(shí)表格過(guò)濾操作示例

    原生JS 實(shí)現(xiàn)的input輸入時(shí)表格過(guò)濾操作示例

    這篇文章主要介紹了原生JS 實(shí)現(xiàn)的input輸入時(shí)表格過(guò)濾操作,結(jié)合實(shí)例形式分析了JavaScript基于頁(yè)面元素遍歷、運(yùn)算、判斷實(shí)現(xiàn)的表格過(guò)濾相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • 前端請(qǐng)求并發(fā)和請(qǐng)求覆蓋的解決方法

    前端請(qǐng)求并發(fā)和請(qǐng)求覆蓋的解決方法

    最近在開(kāi)發(fā)一些大屏,涉及到比較多的數(shù)據(jù)來(lái)源,接口也沒(méi)有做聚合,導(dǎo)致頁(yè)面需要調(diào)很多接口來(lái)填充頁(yè)面數(shù)據(jù),那么就會(huì)有接口并發(fā)的問(wèn)題出現(xiàn),所以本文給大家介紹了如何解決前端請(qǐng)求并發(fā)和請(qǐng)求覆蓋,需要的朋友可以參考下
    2024-10-10
  • js通過(guò)window.open(url)下載文件并修改文件名

    js通過(guò)window.open(url)下載文件并修改文件名

    這篇文章主要給大家介紹了關(guān)于js如何通過(guò)window.open(url)下載文件并修改文件名的相關(guān)資料,我們知道下載文件是一個(gè)非常常見(jiàn)的需求,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 對(duì)于input 框限定輸入值為浮點(diǎn)型的js代碼

    對(duì)于input 框限定輸入值為浮點(diǎn)型的js代碼

    下面小編就為大家?guī)?lái)一篇對(duì)于input 框限定輸入值為浮點(diǎn)型的js代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 詳解webpack運(yùn)行Babel教程

    詳解webpack運(yùn)行Babel教程

    這篇文章主要介紹了詳解webpack運(yùn)行Babel教程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06

最新評(píng)論

化隆| 武夷山市| 苏州市| 台北县| 东阿县| 三穗县| 图木舒克市| 贵阳市| 古蔺县| 屏南县| 石家庄市| 镶黄旗| 海淀区| 岫岩| 广元市| 诸暨市| 香港 | 郓城县| 宾川县| 河池市| 莒南县| 抚州市| 沙河市| 田阳县| 普兰店市| 麦盖提县| 塘沽区| 宜章县| 蓝山县| 阳城县| 滨州市| 抚宁县| 南昌县| 潼南县| 沙湾县| 会理县| 清水河县| 德江县| 土默特右旗| 布拖县| 武乡县|