一.准備工作
系統是Windows 8.1Pro
分析工具是WireShark1.10.8 Stable Version
使用系統Ping命令發送ICMP報文.
二.開始工作
打開CMD.exe鍵入:
ping www.oschina.net
將自動進行域名解析,默認發送4個ICMP報文.
啟動Wireshark,選擇一個有效網卡,啟動抓包.
在控制台回車執行完畢后停止監控.
三.分析階段
截獲的所有報文如下:
總得來看有兩個DNS包(一次域名解析),和8個ICMP包(四次ping)
下面開始分析DNS的工作過程:
打開第一個包:
可以發現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數據:
第一個是Transaction ID為標識字段,2字節,用於辨別DNS應答報文是哪個請求報文的響應.
第二個是Flags標志字段,2字節,每一位的含義不同,具體可以參考上面那個圖,也可以看下面這個圖:
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包:
可以看到和第一個請求包相比,響應包多出了一個Answers字段,同時Flags字段每一位都有定義.
關注一下Flags中Answer RRs 為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站點,以后感興趣再研究下哈哈