wireshark抓包分析——TCP/IP協議


本文來自網易雲社區


當我們需要跟蹤網絡有關的信息時,經常會說“抓包”。這里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP協議為例,簡單介紹TCP/IP協議以及如何通過wireshark抓包分析。

Wireshark 是最著名的網絡通訊抓包分析工具。功能十分強大,可以截取各種網絡封包,顯示網絡封包的詳細信息。

Wireshark下載安裝,略。注意,若在Windows系統安裝Wireshark,安裝成功后可能會出現Wireshark的兩個圖標,一個是Wireshark(中文版);另外一個是Wireshark Legacy (英文版)。下面的內容會以Wireshark Legacy為例介紹。

打開Wireshark,開始界面如下:

 

Wireshark捕獲的是網卡的網絡包,當機器上有多塊網卡的時候,需要先選擇網卡。開始界面中的Interface List,即網卡列表,選擇我們需要的監控的網卡。點擊Capture Options,選擇正確的網卡,然后點擊"Start"按鈕, 開始抓包。

 

我們打開瀏覽器輸入任意http網址,連接再關閉,比如:http://blog.csdn.net。然后,我們回到Wireshark界面,點擊左上角的停止按鍵。查看此時Wireshark的抓包信息。在看抓包信息之前,先簡單介紹下Wireshark界面的含義。其中,封包列表的面板中顯示編號、時間戳、源地址、目標地址、協議、長度,以及封包信息。

 



封包詳細信息是用來查看協議中的每一個字段。各行信息分別對應TCP/IP協議的不同層級。以下圖為例,分別表示:傳輸層、網絡層、數據鏈路層、物理層,一共四層。如果有應用層數據會顯示第五層,即一共會出現五層。

 

每一層都有一個字段指向上一層,表明上一層是什么協議。這大概是因為發包的時候會在數據上依次加上應用層、傳輸層、網絡層、鏈路層的頭部,但是對方收到數據包后是從最底層(鏈路層)開始層層剝去頭部解包的,所以在每層上有一個字段指向上層,表明上層的協議,對方就知道下一步該怎么解包了。以TCP/IP協議為例,下圖中分別是:IPv4、TCP。由於建立TCP連接用不到應用層協議,所以傳輸層就沒有相應的指明上層(應用層)的字段了。

在了解Wireshark界面后,我們來分析TCP協議。這里有很多數據包,我們需要先過濾,添加對應的過濾條件。比如,我添加了目標的ip地址和端口號:tcp and ip.addr==47.95.47.253 and tcp.port==53992,此時獲取到的封包列表如下。

 


在此之前,看下TCP/IP報文的格式。

 

根據上述報文格式我們可以將wireshark捕獲到的TCP包中的每個字段與之對應起來,更直觀地感受一下TCP通信過程。先看三次握手,下圖中的3條數據包就是一次TCP建立連接的過程。

 

第一次握手,客戶端發送一個TCP,標志位為SYN=1,序號seq為Sequence number=0, 53992 -> 80,代表客戶端請求建立連接;

 

第二次握手,服務器向客戶端返回一個數據包,SYN=1,ACK=1,80 -> 53992,將確認序號(Acknowledgement Number)設置為客戶的序號seq(Sequence number)加1,即0+1=1;

 

第三次握手,客戶端收到服務器發來的包后檢查確認序號(Acknowledgement Number)是否正確,即第一次發送的序號seq加1(X+1= 0+1=1)。以及標志位ACK是否為1。若正確,客戶端會再向服務器端發送一個數據包,SYN=0,ACK=1,確認序號(Acknowledgement Number)=Y+1=0+1=1,並且把服務器發來ACK的序號seq(Sequence number)加1發送給對方,發送序號seq為X+1= 0+1=1。客戶端收到后確認序號值與ACK=1,53992 -> 80,至此,一次TCP連接就此建立,可以傳送數據了。


 

還可以通過直接看標志位查看三次握手的數據包,如下圖所示,第一個數據包標志位【SYN】,這是第一次握手;第二個數據包標志位【SYN,ACK】,這是第二次握手;第三個數據包標志位【ACK】,這是第三次握手。

在三次握手的三個數據包之后,第四個包才是HTTP的, 這說明HTTP的確是使用TCP建立連接的。

 

再往下看其他數據包,會發現存在大量的TCP segment of a reassembled PDU,字面意思是要重組的協議數據單元(PDU:Protocol Data Unit)的TCP段,這是TCP層收到上層大塊報文后分解成段后發出去。

 

      每個數據包的Protocol Length都是1502 Byte,這是因為以太網幀的封包格式為:Frame = Ethernet Header + IP Header + TCP Header + TCP Segment Data。即:

1、Ethernet Header = 14 Byte = Dst Physical Address(6 Byte)+ Src Physical Address(6 Byte)+ Type(2 Byte),以太網幀頭以下稱之為數據幀。

2、IP Header = 20 Byte(without options field),數據在IP層稱為Datagram,分片稱為Fragment。

3、TCP Header = 20 Byte(without options field),數據在TCP層稱為Stream,分段稱為Segment(UDP中稱為Message)。

4、TCP Segment Data = 1448 Byte(從下圖可見)。

所以,每個數據包的Protocol Length = 14 Byte + 20 Byte + 20 Byte + 1448 Byte = 1502 Byte。

 

      我們再來看四次揮手。TCP斷開連接時,會有四次揮手過程,標志位是FIN,我們在封包列表中找到對應位置,理論上應該找到4個數據包,但我試了好幾次,實際只抓到3個數據包。查了相關資料,說是因為服務器端在給客戶端傳回的過程中,將兩個連續發送的包進行了合並。因此下面會按照合並后的三次揮手解釋,若有錯誤之處請指出。

 

第一次揮手:客戶端給服務器發送TCP包,用來關閉客戶端到服務器的數據傳送。將標志位FIN和ACK置為1,序號seq=X=2242,確認序號ack=Z=17602,53992 -> 80;

 

第二次揮手:服務器收到FIN后,服務器關閉與客戶端的連接,發回一個FIN和ACK(標志位FIN=1,ACK=1),確認序號ack為收到的序號加1,即X=X+1=2243。序號seq為收到的確認序號=Z=17602,80 -> 53992;

 

第三次揮手:客戶端收到服務器發送的FIN之后,發回ACK確認(標志位ACK=1),確認序號為收到的序號加1,即Y+1=17603。序號為收到的確認序號X=2243,53992 -> 80。

 

      至此,整個TCP通信過程已經介紹完畢。

      附:TCP通信過程:



原文:wireshark抓包分析——TCP/IP協議

網易雲新用戶大禮包:https://www.163yun.com/gift

本文來自網易雲社區,經作者李莉授權發布。

 


相關文章:
【推薦】 網易雲首席安全架構師談安全新形勢:DDOS兩三天,游戲玩家數從幾萬降到幾百
【推薦】 一文了解安卓APP逆向分析與保護機制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM