1. 程式人生 > 實用技巧 >利用WireShark進行DNS協議分析

利用WireShark進行DNS協議分析

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

一.準備工作

系統是Windows 8.1Pro

分析工具是WireShark1.10.8 Stable Version

使用系統Ping命令傳送ICMP報文.

二.開始工作

開啟CMD.exe鍵入:

ping www.oschina.net

將自動進行域名解析,預設傳送4個ICMP報文.

啟動Wireshark,選擇一個有效網絡卡,啟動抓包.

在控制檯回車執行完畢後停止監控.

三.分析階段

截獲的所有報文如下:

105637_ELD7_580940.png

總得來看有兩個DNS包(一次域名解析),和8個ICMP包(四次ping)

下面開始分析DNS的工作過程:

開啟第一個包:

105955_GH0O_580940.png

可以發現DNS為應用層協議,下層傳輸層採用UDP,再下層網路層是IP協議,然後是資料鏈路層的乙太網幀.

需要關注的是應用層的實現也即DNS協議本身.

在此之前,可以從下層獲得一些必要資訊:

UDP(User Datagram Protocol)報文中:DNS的目的埠(Dst Port)是53

IPv4(Internet Protocol Version 4)報文中目的IP是192.168.1.1(區域網路由器)

由於IP報文在網路層進行路由選擇,他會依次送給路由器而不是直接送給DNS伺服器,這一點也十分容易理解,

第一個包是請求包,不可能直接包含DNS伺服器地址.

展開DNS資料:

111309_VYYI_580940.png

第一個是Transaction ID為標識欄位,2位元組,用於辨別DNS應答報文是哪個請求報文的響應.

第二個是Flags標誌欄位,2位元組,每一位的含義不同,具體可以參考上面那個圖,也可以看下面這個圖:

113034_JmcJ_580940.jpg

QR: 查詢/響應,1為響應,0為查詢

Opcode: 查詢或響應型別,這裡0表示標準,1表示反向,2表示伺服器狀態請求

AA: 授權回答,在響應報文中有效,待會兒再看

TC: 截斷,1表示超過512位元組並已被截斷,0表示沒有發生截斷

RD: 是否希望得到遞歸回答

RA: 響應報文中為1表示得到遞迴響應

zero: 全0保留欄位

rcode: 返回碼,在響應報文中,各取值的含義:

0 - 無差錯

1 - 格式錯誤

2- 域名伺服器出現錯誤

3 - 域參照問題

4 -查詢型別不支援

5 - 被禁止

6 ~ 15 保留

緊接著標誌位的是

Quetions(問題數),2位元組,通常為1

Answer RRs(資源記錄數),Authority RRs(授權資源記錄數),Additional RRs(額外資源記錄數)通常為0

欄位Queries為查詢或者響應的正文部分,分為Name Type Class

Name(查詢名稱):這裡是ping後的引數,不定長度以0結束

Type(查詢型別):2位元組,這裡是主機A記錄.其各個取值的含義如下:

值 助記符 說明

1 A IPv4地址。

2 NS 名字伺服器。

5 CNAME 規範名稱。定義主機的正式名字的別名。

6 SOA 開始授權。標記一個區的開始。

11 WKS 熟知服務。定義主機提供的網路服務。

12 PTR 指標。把IP地址轉化為域名。

13 HINFO 主機資訊。給出主機使用的硬體和作業系統的表述。

15 MX 郵件交換。把郵件改變路由送到郵件伺服器。

28 AAAA IPv6地址。

252 AXFR 傳送整個區的請求。

255 ANY 對所有記錄的請求。

Class(類):2位元組,IN表示Internet資料,通常為1


下面是截獲的第二個DNS包:

123716_Dner_580940.png

可以看到和第一個請求包相比,響應包多出了一個Answers欄位,同時Flags欄位每一位都有定義.

關注一下Flags中AnswerRRs 為4 說明對應的Answers欄位中將會出現4項解析結果.

Answers欄位可以看成一個List,集合中每項為一個資源記錄,除了上面提到過的Name,Type,Class之外,還有Time to

Live,Data length,Addr.

Time to Live(生存時間TTL):表示該資源記錄的生命週期,從取出記錄到抹掉記錄快取的時間,以秒為單位.這裡是0x00 00 00 fd 合計253s.

Data length(資源資料長度):以位元組為單位,這裡的4表示IP地址的長度為4位元組.也就是下面Addr欄位的長度.

Addr(資源資料): 返回的IP地址,就是我們想要的結果.


可以發現有4條資源記錄,4個不同的IP地址,說明域名www.oschina.net 對應有4個IP地址,分別是:

112.124.5.74

219.136.249.194

61.145.122.155

121.9.213.124

CMD中顯示的是第一條IP地址.我試了下直接訪問上面各個地址的80埠(http),

第一個和第二個顯示403 Forbidden

第三個和第四個顯示404 Not Found

還有每個地址哦Server都不一樣oscali,oscdb,liubc,ep2,第一個像阿里雲伺服器,第二個看起來像資料庫的伺服器,其他就不知道了...

Web伺服器貌似是Tengine,

不知道為什麼通過IP地址無法直接訪問web站點,以後感興趣再研究下哈哈


關於ICMP協議的報文分析將在之後的文章中給出.今天先到這吧.

最後,歡迎大家評論交流~特別是OSC在搞什麼鬼.


轉載於:https://my.oschina.net/ybusad/blog/290922