1. 程式人生 > 其它 >[Wireshark Lab v8.1] Lab:DNS

[Wireshark Lab v8.1] Lab:DNS

[Wireshark Lab v8.1] Lab 翻譯與解題.

以下實驗步驟均來自實驗指導手冊。
實驗指導手冊下載地址:Jim Kurose Homepage (umass.edu)

Lab DNS

在圖書的2.4章講到了 Domain Name System(DNS)協議, 它將域名解析為 IP 地址, 在因特網技術設施上扮演了關鍵性角色. 在本次實驗中, 我們將從客戶端對DNS進行更進一步探討. 回想一下,客戶端在 DNS 中的角色相對簡單——客戶端向其本地 DNS 伺服器傳送查詢,並收到回覆。 正如教科書中的圖 2.19 和 2.20 所示,很多事情都在“幕後”進行,DNS 客戶端不可見,因為分層 DNS 伺服器相互通訊以遞迴或迭代地解析客戶端的 DNS 查詢。 然而,從 DNS 客戶端的角度來看,該協議非常簡單——向本地 DNS 伺服器制定查詢並從該伺服器接收響應。

在進行本次實驗之前, 你應該需要重新回顧第 2.4章關於DNS的內容. 具體的, 需要回顧本地DNS伺服器,DNS快取,DNS記錄和訊息和訊息中的型別域.

1. nslookup

讓我們通過使用nslookup命令開始我們對 DNS 的學習,該命令將呼叫底層 DNS 服務來實現其功能。nslookup命令在大多數 Microsoft、Apple IOS 和 Linux 作業系統中都可用。 要執行nslookup,您只需作業系統對應的終端視窗鍵入nslookup命令。

在其最基本的操作中,nslookup允許執行它的主機查詢任何指定的 DNS 伺服器以獲取 DNS 記錄。被查詢的DNS伺服器可以是根DNS伺服器、頂級域名(TLD)DNS伺服器、權威DNS伺服器或中間DNS伺服器(這些術語的定義見教科書)。例如,nslookup

可用於檢索將主機名(例如 www.nyu.edu)對映到其 IP 地址的“Type=A”DNS 記錄。為完成此任務,nslookup向指定的 DNS 伺服器(或如果未指定特定的 DNS 伺服器, 則是執行nslookup的主機的預設本地 DNS 伺服器)傳送 DNS 查詢,從該 DNS 伺服器接收 DNS 響應,然後顯示結果。

讓我們來試試nslookup吧!我們將首先在位於馬薩諸塞大學 (UMass) 校園計算機科學系的 newworld.cs.umass.edu 主機上的 Linux 命令列上執行nslookup,其中本地名稱伺服器名為 primo.cs.umass.edu (其 IP 地址為 128.119.240.1).

在這個例子中, nslookup 帶有一個指定主機名(www.nyu.edu)的引數. 因此命令的含義為“請告訴我主機www.nyu.edu的IP地址”. 如圖中所顯示的那樣, 命令的響應攜帶了兩部分資訊 1. 給出相應的 DNS 伺服器的 IP 地址, 在這個例子中是 UMass 的本地 DNS 伺服器, 2. 解析出來的 DNS 記錄, www.nyu.edu 典型的主機名和IP地址, 你可能注意到了有兩個主機名到IP的對映. 第一個(216.165.47.12)是在IPv4地址下的點十分製表示, 第二個)(2607:f600:1002:6113::100)是一個更長更復雜的IPv6地址. 我們將在第四章學習到 IPv4 和 IPv6 與它們不同的地址表示法, 現在我們主要關注更常見的 IPv4 就好.

儘管響應結果是來自於UMass本地DNS伺服器(128.119.240.1), 但也很有可能經過了由書中2.4節描述的中間DNS伺服器迭代訪問的過程.

通過-type=A引數可以指定型別伺服器的響應, 比如-type=NS它將返回一個權威的(authoritative)DNS伺服器的主機名和IP地址, 該DNS伺服器知道如何在權威伺服器域名下獲取指定主機的IP地址.

在圖2所示的例子中, 我們對nslookup命令使用了-type=NSnyu.edu選項, 這會導致 nslookup 向預設的本地 DNS 伺服器傳送對型別 NS 記錄的查詢。換句話說,查詢是說,“請將 nyu.edu 的權威 DNS 的主機名傳送給我”。(當不使用-type選項時,nslookup使用預設值,即查詢A類記錄。)上面截圖中顯示的答案首先表示提供答案的DNS伺服器(這是預設的本地UMass DNS 伺服器,地址為 128.119.240.1) 以及三個 NYU DNS 名稱伺服器。這些伺服器中的每一個確實是紐約大學校園主機的權威 DNS 伺服器。但是,nslookup 也表明答案是“非權威的”,這意味著該答案來自某個伺服器的快取,而不是來自權威的 NYU DNS 伺服器。最後,答案還包括紐約大學權威 DNS 伺服器的 IP 地址。 (即使 nslookup 生成的 type-NS 查詢沒有明確要求 IP 地址,本地 DNS 伺服器也“自動”返回這些,並且由nslookup顯示結果。)

nslookup 還有很多額外的選項, 10個最著名的nslookup用法man頁面

之後, 我們有時可能會對ip地址繫結的域名感興趣, nslookup也支援這種被叫做反向DSN查詢的操作, 如圖3, 將IP地址作為nslookup的引數, 就會返會它對應的主機名.

現在我們對nslookup有了一個基本的瞭解, 是時候在自己的裝置上嘗試一下了.

  1. 執行nslookup 來獲得 Indian Institute of Technology in Bombay, India: www.iitb.ac.in. web server 的IP地址.
  2. 查詢提供問題1答案的DNS伺服器的IP地址.
  3. 問題1的答案是來自一個權威伺服器還是非權威伺服器?
  4. 使用nslookup來獲取權威的iit.ac.in域名下的name server. 它的主機名是什麼?(如果有多個, 請回答第一個) 如果你需要找權威 name server的IP地址, 應該怎麼做?

2. 你電腦上的 DNS 快取

根據書本上的對迭代和遞迴DNS查詢解析的描述(圖2.19和圖2.20), 你可能會認為本地 DNS 伺服器必須在每次應用需要主機名到IP地址的轉換時都需要進行一次DNS查詢. 但實際上並不會這樣.

大多數主機(你的個人計算機)儲存一個最近獲取到的DNS記錄的快取(有時被叫做DNS解析快取), 就類似Web伺服器儲存它們獲取到HTTP響應的快取一樣. 當DNS服務被喚起, 會首先檢查是否命中本地的DNS快取, 如果命中, 則不需要與本地DNS伺服器進行通訊, 而是直接應用快取記錄. 不過一條DNS記錄最終會超時, 從而被移除, 同樣本地DNS伺服器(圖2.19,2.20)的快取記錄也會超時.

你可以主動清空本地的DNS還蠢, 這樣做是無害的, 它只意味著你的電腦當需要DNS記錄時會重新喚起分散式的DNS服務, 因為它不能重用本地快取了. Mac可以通過一下命令來清空快取 sudo killall -HUP mDNSResponder, windows下使用 ipconfig /flushdns, Linux下可以用 sudo systemd-resolve --flush-caches.

3. 通過 Wireshark 追蹤 NDS

現在我們已經熟悉了nslookup和清空了DNS解析快取, 可以開始重點: 捕獲由真實Web瀏覽所產生的DNS訊息.

  • 如上面描述的那樣, 清空主機上的DNS快取
  • 開啟Web瀏覽器,並禁用快取
  • 開啟Wireshark, 並在過濾器中輸入ip.addr == <your IP address>, 這樣 wireshark 就會只展示你的主機所發起或接收的報文.
  • 開始抓包
  • 在瀏覽器輸入 http://gaia.cs.umass.edu/kurose_ross/
  • 停止抓包

請回答如下問題:

  1. 選中第一條解析主機名 gaia.cs.umass.edu 的DNS查詢資訊, 它的報文編號是多少? 是使用UDP還是TCP?
  2. 現在選中第一條DNS查詢的響應, 它的報文編號是多少? 是使用UDP還是TCP?
  3. DNS 查詢報文的目的埠是多少? 響應報文的源埠?
  4. DNS 查詢報文傳送的目的IP?
  5. 選中DNS查詢報文, DNS報文中包含了多少“問題”? 又包含了多少“答案”?
  6. 選中DNS響應報文, DNS報文中包含了多少“問題”? 又包含了多少“答案”?
  7. http://gaia.cs.umass.edu/kurose_ross/ 網頁的主頁檔案包含了圖片物件 http://gaia.cs.umass.edu/kurose_ross/header_graphic_book_8E_2.jpg, 它與網頁在同一域名下, 對於網頁檔案的請求報文編號是多少? 用於解析 gaia.cs.umass.edu 以便可以將初始 HTTP 請求傳送到 gaia.cs.umass.edu IP 地址的 DNS 查詢跟蹤中的資料包編號是多少? 收到DNS響應的報文編號是多少? 發起圖片請求對應的報文編號是多少? 解析 gaia.cs.umass.edu 以便可以將第二個 HTTP 請求傳送到 gaia.cs.umass.edu IP 地址的 DNS 查詢中的資料包編號是多少? 討論下DNS快取會如何影響這個問題.

解答:

有一個奇怪的點是, 使用chromium核心的瀏覽器, 就算清空了DNS快取, 也看不到 gaia.cs.umass.edu 的 DNS 請求, 我懷疑是QUIC的問題, 因此使用Safari來請求就可以看到DNS報文了

  1. DNS使用UDP, 我的請求報文編號是:147
  2. 響應報文同樣是UDP, 編號是148, 應該是路由器的DNS伺服器將其快取了
  3. DNS埠為53
  4. 目的IP就是本地路由IP
  5. DNS報文中包含了1個問題, 0個答案
  6. 包含1個問題, 1個答案, DNS報文的問題通常只有一個, 一個問題可以有很多答案, 問題長度, 回答長度都是有兩個位元組編碼, 因此最多為16^4-1, 響應報文時, 會講原問題帶上, 回答只需要用兩個位元組標記對應那個問題就行.
  7. 在解析到伺服器對應IP地址後, 瀏覽器還需進行TCP三次握手才能與伺服器傳送HTTP請求, 這裡的問題和5有點重複, 但其實第一個請求的DNS查詢資訊型別是HTTPS的, 因此前面的回答要改一下, 不過真正啟動HTTP請求的DNS還是型別為A的. 後面關於圖片依賴的DNS請求我還是挺困惑的, 因為我的trace裡就只有一次對主機的DNS請求, 猜測是預設第二次圖片請求前也需要發DNS, 但被瀏覽器或本地DNS快取優化掉了.

現在讓我們來實驗nslookup, 對nslookup www.cs.umass.edu抓包

你應該能獲得一個類似的結果, 讓我們開啟第一個A查詢(報文編號是19, 並且在資訊欄裡有 A 資訊)

  1. DNS查詢的目的埠和DNS響應的源埠是多少?
  2. DNS查詢傳送的目的IP是什麼? 這是你本地預設DNS伺服器的地址麼?
  3. 檢查DNS查詢報文, 它的“Type”是什麼? 查詢報文包含任何”答案“麼?
  4. 檢查DNS響應報文, 包含了多少“問題”, 多少“答案”?

最後, 讓我們使用nslookup來查詢“NS”型別的記錄. 輸入命令nslookup -type=NS umass.edu, 回答下列問題

  1. DNS查詢傳送的目的IP是什麼? 這是你本地預設DNS伺服器的地址麼?
  2. 檢查DNS查詢報文, 包含了多少”問題“? 查詢報文包含任何”答案“麼?
  3. 檢查DNS響應報文, 包含了多少“答案”? 答案中包含了什麼資訊? 返回了多少”額外資源“記錄? 這些額外資源記錄包含了什麼資訊?

這些內容相對簡單, DNS報文詳細格式可以檢視這篇文章對照.