Wireshark數據抓包分析之傳輸層協議(TCP協議)

使用TCP協議傳輸數據相對來說更安全,因爲通信雙方擁有一個專屬的通信通道,每發送一個數據包都有確認回覆,若數據包丟失。如果發送放沒收到確認包,就可以重發這個數據包。

最經典的例子就是三次握手。三次握手是通信雙方建立TCP連接前的必須步驟。第一次握手時請求方向接收方發送友好問候,請求建立連接。第二次握手接收方禮貌回覆,表示收到請求。第三次握手請求方堅定交往信息,向接收方表示已做好了連接準備。於是雙方的TCP連接就建好啦~

完成三次握手後,雙方就可以開始傳輸數據了。當然,握手很嚴謹,說再見也是一絲不苟的。詳細內容可以在合天網安實驗室裏進行實驗操作《Wireshark數據抓包分析之傳輸層協議(TCP協議)》瞭解。下面開始實戰。

根據已經搭建好的實驗環境,本次實戰步驟如下:

1. 在測試環境使用發包工具和Wireshark抓取TCP三次握手和四次斷開的數據包

2. 詳細分析TCP協議的三次握手以及四次斷開。

本次的任務可以拆分成:安裝發包工具,配置TCP客戶端(請求方),服務端(接收方),與學習Wireshark軟件懂使用。咱開始吧~

我們使用" TCP&UDP測試工具"來製作和發送TCP數據包,雙擊實驗機器桌面的" TCP&UDP測試工具",會出現下圖顯示頁面:

圖片1.png

下面我們需要配置TCP的服務端以及客戶端。首先配置服務器端:選擇地址爲10.1.1.33的機器,雙擊桌面的" TCP&UDP測試工具",右鍵點擊服務器模式,在下拉列表中,選擇創建服務器,如下圖:

圖片2.png

選擇"創建服務器"之後,會彈出服務器端口設置,本次使用默認工具給的6000端口即可,點擊"確定"按鈕。

圖片3.png

點擊"確定"按鈕之後,在左側的服務器模式列表中,會出現創建的列表,選擇我們創建的服務器,右鍵點擊,選擇"啓動服務器",即完成了服務器端的配置。

圖片4.png

接下來配置客戶端,步驟與前面的類似:選擇地址爲10.1.1.142的機器,雙擊桌面的" TCP&UDP測試工具",右鍵點擊客戶端模式,在下拉列表中,選擇"創建連接",如下圖:

圖片5.png

在彈出的窗口中,選擇TCP協議,服務器IP爲10.1.1.33.端口6000,本機隨意IP,如下圖:

圖片6.png

點擊創建後,如下圖:

圖片7.png

那麼我們看看Wireshark軟件獲取到的客戶端與服務器端之間發送到TCP數據包吧。

獲取的TCP協議的數據包分爲兩部分,即TCP三次握手,四次斷開的數據。在實際的操作中,我們往往還會抓到除了目標地址之外往來到數據包,因此先使用過濾器過濾一下IP源,方便我們查看。

啓動Wireshark,在Filter中輸入tcp,點擊Apply會看到很多的數據包,這是因爲測試環境中,有很多的應用程序,與其服務器連接,使用TCP協議。如下圖:

圖片8.png

在這裏,我們已知兩臺機器的IP情況下,可以在filter中輸入"ip.addr == 10.1.1.142 and ip.addr == 10.1.1.33"來過濾出我們想要的數據,點擊工具中的"apply連接"按鈕。如下圖:

圖片9.png

圖片10.png

在上圖中,70,73,74幀是tcp的三次握手,428,429,430,431幀是四次斷開的數據。

分析握手

通過前面到工作,我們已經找到了想要的數據包,接下來我們將對TCP的三次握手進行詳細分析。

首先我們看TCP包的首部。TCP首部的通用格式如下圖所示:

圖片11.png

在上面的圖中,標出了每一個字段,咱今天就說說比較重要的源端口、目標端口、標記。

源端口表明了發送方的輸出端口號。目標端口表示數據包進入接收方的端口號端口對上了,才能正確地將數據包傳達。標記用來表示所傳輸的TCP數據包類型,包括URG、ACK、PSH、RST、SYN和FIN,其中SYN表示同步序號,使用在建立連接時;ACK是確認標誌,表示應答域有效,就是前面所說的接收方對請求方的問候表示禮貌致意;FIN表示發送端以及達到數據末尾,此時雙方就準備揮手告別了。

那麼接下來咱具體分析下三次握手。

乾貨來了!

TCP第一次握手,捕獲的數據包信息如下所示:

圖片12.png

從Wireshark的Packet List面板中的Info列可以看到顯示的TCP標誌位是SYN,所以該數據包是客戶端向服務器發送的第一次握手連接。在Packet Details面板中,顯示了該包的詳細信息,下面詳細介紹。

圖片13.png

以上信息,表示該包的大小爲62個字節。

圖片14.png

以上內容表示源IP是10.1.1.142,目的IP爲10.1.1.33。

圖片15.png

以上內容是傳輸層首部的詳細信息,這裏使用TCP協議,其中源端口爲56678,目標端口爲6000。

更多詳細的信息,可以進入合天實戰實驗課程查詢。

接下來是第二次握手,TCP第二次握手捕獲數據包相信信息,如下:

圖片16.png

在該界面顯示了第二次握手數據包的詳細信息,其中位於TCP上面的信息與第一次握手時相類似,留給文後照着上面的分析獨立思考。

同樣地,第三次握手也一定沒問題,看下圖:

圖片17.png

於是這樣就完成了TCP連接的建立啦~

五 再來看看再見

TCP的四次斷開,也是TCP協議的主要工作之一。那咱也看看四次分手,偶不,四次斷開~TCP第一次斷開連接的數據包如下:

圖片18.png

在該界面顯示了TCP第一次斷開,數據包的詳細信息,是不是和握手時的數據包很像?

查看tcp數據包可以看到客戶端向服務器發送FIN和ACK標誌的數據包開始斷開連接,其中FIN和ACK標誌位都爲1。

Source Port: 56678(56678) #源端口號

Destination Port: 6000(6000) #目標端口號

Stream index: 0 #流節點號

TCP Segment Len: 0 #分段長度

Sequence number: 1 (relative sequence number) #序列號

Acknowledgment number: 1 (relative ack number) #確認編號

Header Length: 20 bytes #首部長度

.... 0000 0001 0001 = Flags: 0x011 (FIN,ACK) #標誌位,此處爲(FIN,ACK)

\000. .... .... = Reserved: Not set

...0 .... .... = Nonce: Not set

.... 0... .... = Congestion Window Reduced (CWR): Not set

.... .0.. .... = ECN-Echo: Not set

.... ..0. .... = Urgent: Not set

.... ...1 .... = Acknowledgment: Not set #確認編號已設置

.... .... 0... = Push: Not set

.... .... .0.. = Reset: Not set

.... .... ..0. = Syn: Set #請求位

.... .... ...1 = Fin: Not set #FIN標誌位

Expert Info (Chat/Sequence): Connection finish (FIN) #專家信息

Connection finish (FIN) #消息內容,連接完成(FIN)

Severity level: Chat #安全級別

Group: Sequence

Window size value: 64240 #窗口大小

Calculated window size: 64240 #估計的窗口大小

Window size scaling factor: -1 (unknown) 窗口大小縮放比例因素

Checksum: 0x16cb [validation disabled] #校驗和

Good Checksum: False

Bad Checksum: False

Urgent pointer: 0

FIN是1表示要分手啦~

在TCP第二次斷開連接的數據包是服務器向客戶端發送的ACK包,其中ACK標誌位爲1。

圖片19.png

TCP第三次斷開連接的數據包是服務器向客戶端發送的FIN和ACK包。其中FIN和ACK標誌位爲1。

圖片20.png

TCP第四次斷開連接的數據包,客戶端向服務器發送ACK的包。其中,ACK標誌位都爲1。

圖片21.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章