天天看點

軟體測試 | 抓包分析TCP

作者:霍格沃茲測試

1.TCP簡介

TCP是在傳輸層中,一種面向連接配接的、可靠的、基于位元組流的通信協定。

2.抓包分析的工具

抓包分析的工具分類如下。

(1)網絡嗅探工具:Tcpdump、Wireshark。

(2)代理工具:Fiddler、Charles、Anyproxyburpsuite、Mitmproxy。

(3)分析工具:Curl、Postman、Chrome Devtool。

3.抓包分析的部分工具介紹

(1)Tcpdump

Tcpdump是一款将網絡中傳送的資料包的 “頭” 完全截獲下來供使用者分析的工具。它支援針對協定、主機、網絡或端口的過濾,并不通過and、or、not等邏輯語句去掉無用的資訊。

用Tcpdump時刻監聽443端口,如果發現異常資訊,就把這類資訊輸入到log檔案中,指令代碼如下。

sudo tcpdump port 443 -v -w /tmp/tcp.log           

這條指令裡使用的參數解析如表6-2所示。

軟體測試 | 抓包分析TCP

(2)Wireshark

Wireshark是一款網絡嗅探工具,它除了擁有Tcpdump功能,還有更多擴充功能,如分析功能。但是在接口測試中,抓包汪汪都是在伺服器上進行的,伺服器一般不提供UI界面,是以Wireshark無法在伺服器上運作,隻能利用Tcpdump,把它監聽到的資訊輸入到log檔案,然後将log檔案導入Wireshark使用,以便于我們可在有UI界面的用戶端上分析資料包。

(3)抓包分析實作

擷取一個HTTP的GET請求的實作步驟如下。

1)在百度上搜MP3(http://www.baidu.com/s?wd=mp3).

2)用Tcpdump截獲這個GET請求,并将擷取的資訊輸入到log檔案。

3)用Wireshark打開log檔案,如圖6-4所示。

軟體測試 | 抓包分析TCP

log檔案的前幾段資訊時表示三次握手,三次握手就像是下面這些操作(見圖6-5)。

軟體測試 | 抓包分析TCP

注:SYN、ACK表示 “标志位” ,Ack表示 “ 确認序号 ”

(1)第一次握手:建立連接配接時,用戶端将标志位SYN置為1,随機産生一個值Seq=x,并發送SYN包到服務端,用戶端進入SYN_SENT狀态,等待服務端确認。

(2)第二次握手:服務端收到SYN包後,有标志位SYN=1知道用戶端請求建立連接配接,服務端将标志位SYN和ACK都置為1,Ack=x+1,随機産生一個值Seq=y,并将該SYN包發送給用戶端以确認連接配接請求,此時服務端進入後SYN_RCVD狀态。

(3)第三次握手:用戶端收到服務端的SYN包後,檢查Ack是否為y+1,ACK是否為1,如果正确,則将标志位ACK置為1,Ack=y+1,并将SYN包發送給服務端,服務端檢查Ack是否為y+1,ACK是否為1,如果正确則連接配接建立成功,此包發送完畢,用戶端和服務端進入ESTABLISHED狀态,完成三次握手。

經過三次握手,用戶端和服務端就可以進一步 “交流” 了,如圖6-6所示。

軟體測試 | 抓包分析TCP

結束 “ 交流 ” 時,也需要進行四次揮手,如圖6-7所示。

軟體測試 | 抓包分析TCP

(1)第一次揮手:用戶端向服務端發送一個FIN,請求關閉資料傳輸。

(2)第二次揮手:服務端接收到用戶端的FIN,向用戶端發送一個ACK,其中ACK的值等于FIN+SEQ。

(3)第三次揮手:服務端向用戶端發送一個FIN,告訴用戶端應用程式關閉。

(4)第四次揮手:用戶端收到服務端的FIN,回複一個ACK給服務端。其中ACK的值等于FIN+SEQ。

搜尋微信公衆号:TestingStudio霍格沃茲的幹貨都很硬核