Networking

Web 瀏覽器如何將 DNS 名稱的每個部分的原始字節解析為人類可讀的形式?

  • June 27, 2020

我的重點是使用 python 以程式方式解析 DNS 數據包的結構。考慮一下我的瀏覽器通過管道發送一個大域名而不抱怨的快照。 在此處輸入圖像描述

讓我們仔細看看字節串: b’\x03www99dksjfhkdfgh534534534dkfghkldfhglksdfhg435634634dkfghlkd\x03com\x00’ 在此處輸入圖像描述

我可以用這樣的邏輯在python中以程式方式編寫我的程式碼

在此處輸入圖像描述

所以我的問題是:Web 瀏覽器如何將 DNS 名稱的每個部分的原始字節解析為人類可讀的形式? 歡迎任何形式的建議/幫助。

DNS 協議中名稱的有線格式是(例如):

該名稱www.example.com.分為四個標籤:

“www”、“example”、“com”和“”(末尾總是有空標籤,代表樹的根)。

每個標籤都使用指定標籤長度的前綴進行編碼(單字節,前兩位保留,產生一個六位整數),然後是標籤的原始內容(與指定的前綴一樣多的字節)。

上面的範例名稱是\x03www\x07example\x03com\x00(如果我們對\xNN不一定可讀的字節值使用正常格式,則值為十六進制)。

當以有線格式讀取名稱時,您將從第一個字節開始,查看它指定下一個標籤的長度,讀取該標籤的那麼多字節,重複此過程直到您到達零長度標籤表示樹的根(和名稱的結尾)。

然而,在一個數據包中,也有可能壓縮名稱(通過參考以前的標籤)。

除非專門用於學習,否則您可能希望查看例如Dnspython而不是從頭開始。

引用自:https://serverfault.com/questions/1023136