一、 實驗目的:
在虛擬機下NAT模式下通過Wireshark抓包,分析QQ的傳輸模式。了解QQ在傳輸信息過程中用到的協議。分析在Nat模式下,信息傳輸的穿透性。
二、 實驗環境:
Win7 專業版32位(在虛擬機里面)。
Win7 旗艦版64位(物理機)
QQ版本:TM2013
Wireshark
三、 實驗內容:
1、 QQ登錄
1)、UDP登錄
在虛擬機的win7打開QQ面板,設置登錄服務器的類型為UDP
啟動wireshark,然后開始登錄QQ,登錄成功等待一會兒停止wireshark的抓包。
抓包如圖:
我們可以看到本地向遠程登錄服務器183.60.48.174發送了一個UDP的數據包,這個就是IP就是在剛才設置UDP登錄時的系統默認IP,還可以看到這個IP返回了一個UDP的數據包。看來這兩個包就應該是登錄驗證的包,接下來的幾個包的服務器IP變成了183.60.48.165,由於這個IP和登錄服務器的IP位於統一網段,因此我們可以猜測這個IP是騰訊用來存儲我們發送的信息的服務器。需要注意的是,在多次實驗下,可以發現服務器不止183.60.48.165這一個,這是因為想QQ這樣的大吞吐量的信息交互,必須用多台服務器分流,所以這個IP並不一定是某一個。下面的一些包應該就是心跳包。那個OIQC協議就是QQ用的協議,其實實際上也是一個UDP包。下面的DNS協議就是因為我的QQ是在虛擬機里面登錄的,在向外網交互信息的時候會通過網關192.168.214.2解析。
我們來分析一下登錄時候的UDP包
從這個圖我們可以得知源和目的的IP,mac地址,還有雙方的端口號等等一些信息。
數據鏈路層:
目的MAC地址:00 50 56 e3 56 95
本機MAC地址: 00 0c 29 ba 59 3c
網絡層:
通過查詢資料和分析我們知道:
45:版本IPv4,首部長度20字節
00:區分服務
00-73:總長度175字節
36-1e:標識
00-00:標志和偏移
80:生存時間128
11:傳輸協議UDP(17)
傳輸層:
0f-a0:源端口4000
1f-40:目的端口8000
009b:長度155字節
7f-c4:檢驗和
QQ的數據
通過查詢資料和分析我們知道:
02:QQ報文的開頭
34-20:QQ客戶端的版本號,實驗所用版本為QQTM2013
08-25:用戶請求登陸的命令的序號
67-dc:發送數據的序號
56-a6-d2-5c:用戶QQ號碼,實驗中為1453773404
之后的內容為加密的數據內容
最后一個字節03:QQ報文的結尾
2)、TCP登錄
設置如圖:
啟動wireshark,然后開始登錄QQ,登錄成功等待一會兒停止wireshark的抓包。
抓包如圖:
可以看到幾個TCP的包還有一個SSL的包
對TCP包分析如圖:
通過對UDP協議的分析,我們可以看到數據層和網絡層的十六進制代碼和之前的一模一樣,這里我們就值分析傳輸層的TCP協議了,如圖:
通過查詢資料和分析我們知道:
C4-5e:源端口號50270
01- bb:目的端口443
45-34-fc-63:序號
00-00-00-00:確認號
80-02:數據偏移,標志
20-00:窗口大小8192字節
7f-3b:檢驗和
00-00:緊急指針
其余部分為可選字段和填充字節
在TCP協議里面我們沒有看到QQ的登錄驗證消息。為什么呢?一看這里還有一個SSL協議,QQ會不會是通過SSL驗證的呢?
SSL((Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網絡通信提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層對網絡連接進行加密。)
那么我們來看看這個包:
02:QQ報文的開頭
34-20:QQ客戶端的版本號,實驗所用版本為QQTM2013
08-25:用戶請求登陸的命令的序號
67-dc:發送數據的序號
56-a6-d2-5c:用戶QQ號碼,實驗中為1453773404
之后的內容為加密的數據內容
最后一個字節03:QQ報文的結尾
可見,這個包的信息和UDP登錄時候的一樣,那么TCP登錄是確實使用了SSL。
2、 心跳消息數據包
如圖,通過IP地址查詢,可以知道119.147.45.40是廣東深圳的IP,而深圳是騰訊的老巢。在多次的抓包中也可以看到這個IP段,所以我們有理由相信,這個IP段是騰訊的。
那么我們打開來看看。
看到這里,確實有很熟悉哦。通過查閱資料和分析我們知道:
通過查詢資料和分析我們知道:
02:QQ報文的開頭
34-20:QQ客戶端的版本號,實驗所用版本為QQTM2013
00-58:用戶在線的命令序號
3b-09:發送數據的序號
56-a6-d2-5c:用戶QQ號碼,實驗中為1453773404
之后的內容為加密的數據內容
最后一個字節03:QQ報文的結尾
3、 收發信息數據包
對方在線的時候
我們看看第一個包:
可以看到藍色字體那里的02是QQ報文的開頭,這里需要注意的就是00-cd是客戶端向服務器發送消息的命令序號,1b-db是發送數據序號,其他的都一樣。通過幾次實驗發現,00-cd客戶端向服務器發送消息的命令序號是固定的,而1b-db發送數據序號是會改變的。
而且沒每送一個包,服務器是會回復一個包給客戶端的。
四、實驗總結:
通過實驗我還發現QQ貌似是會和每一個在線好友建立一個連接,因為當我登錄只有一個好友的QQ時,wireshark抓到的包就幾個,而登錄有上百好友的QQ時,發現連接數也有數百個。
PS:這是去年10月份我們老師給我們講網絡協議時,自己做的一次對QQ協議的分析,當時自己對於協議也不是很明白,但是通過查閱資料,還是獨立完成了這么一次分析,由於時間過得太久,當時查閱的資料早已忘記出處。真的很感謝網絡上前輩們、朋友們的無私分享,我們今天才得以有那么多資料查閱,衷心感謝!還要感謝姚老師的指導。文中有錯之處,還望批評指出,在此先謝過!