黑袜帅主玩奴Gay.2022_波多野结衣av一台道_观看出轨少妇视频在线观看_无码视频网站亚洲精华液国产_精品自在拍精选

天天微動(dòng)態(tài)丨007. 從零開始搭建 DNS 服務(wù)器——入門篇
來源:嗶哩嗶哩     時(shí)間:2023-01-19 13:25:26

前言

簡單來說,域名解析協(xié)議(DNS,Domain Name System)是一個(gè)應(yīng)用層協(xié)議,可以將域名和 IP 地址相互映射,使人更方便地訪問互聯(lián)網(wǎng),而不用去記住復(fù)雜的 IP 地址。


(相關(guān)資料圖)

DNS 協(xié)議建立在 UDP 或 TCP 協(xié)議之上,默認(rèn)使用 53 號(hào)端口??蛻舳四J(rèn)通過 UDP 協(xié)議進(jìn)行通訊,本文就以 UDP 協(xié)議進(jìn)行講解,不考慮報(bào)文長度超過了 512 字節(jié)使用 TCP 協(xié)議的情況。

了解了 DNS 的基本原理,我們就可以寫一個(gè)最簡單的?DNS 服務(wù)器了。在入門階段,這個(gè)簡單的 DNS 服務(wù)器,僅具有最基本的“代理”功能。

即我們的 DNS 服務(wù)器在接到客戶端發(fā)來的 DNS 請(qǐng)求后,直接將請(qǐng)求轉(zhuǎn)發(fā)到其他可用的 DNS服務(wù)器(如114.114.114.114)上,而不對(duì)報(bào)文做任何修改。待 DNS 響應(yīng)后,直接將響應(yīng)結(jié)果返回給 DNS 客戶端。

實(shí)現(xiàn)

DNS 服務(wù)器需要 bind 到 53 端口,而且采用 UDP 協(xié)議。先導(dǎo)入 Python 標(biāo)準(zhǔn)庫:socket,用?socket.socket(socket.AF_INET, socket.SOCK_DGRAM)走的是 UDP 協(xié)議。

在 DNS 服務(wù)器運(yùn)行的邏輯中,使用?While True 循環(huán),一直接受來自客戶端的請(qǐng)求。接收到的數(shù)據(jù)是一個(gè)兩元組,解包得到報(bào)文消息和客戶端 IP 地址。

新建另一個(gè) socket 對(duì)象,直接將報(bào)文轉(zhuǎn)發(fā)給 114 DNS。

最后將響應(yīng)數(shù)據(jù)返回給客戶端,一次 DNS 請(qǐng)求處理完成。

完整代碼如下:

總結(jié)

這樣,我們就實(shí)現(xiàn)了一個(gè)極其簡單的 DNS 服務(wù)器(或者說是DNS 代理服務(wù)器)。審視這十來行代碼,還是有很多不足之處:

單純轉(zhuǎn)發(fā)數(shù)據(jù),徒勞無功,不如直接請(qǐng)求 114 DNS;

無法自定義 IP 與域名映射,即自定義記錄;

沒有緩存機(jī)制,每次請(qǐng)求都要向 114 DNS 請(qǐng)求;

沒有處理客戶端請(qǐng)求的錯(cuò)誤,如請(qǐng)求超時(shí)等;

只能處理單個(gè)請(qǐng)求,沒有并發(fā)處理能力。

這些不足將會(huì)在以后的文章中加以改進(jìn),敬請(qǐng)關(guān)注。

延伸閱讀

超詳細(xì) DNS 協(xié)議解析:https://zhuanlan.zhihu.com/p/351059293

socket --- 底層網(wǎng)絡(luò)接口 — Python 3.11.1 文檔:https://docs.python.org/zh-cn/3/library/socket.html

DNS協(xié)議:https://www.jianshu.com/p/915de89d070e

標(biāo)簽: SOCKET MESSAGE CODING 代理服務(wù) python MAIN HTTPS 簡單來說

廣告

X 關(guān)閉

廣告

X 關(guān)閉