如果本文對你有幫助,歡迎關注、討論、點贊、收藏、轉發給朋友,讓我有持續創作的動力,讓我們一起相互學習共同進步。
Wireshark軟體安裝
軟體下載路徑:wireshark官網。按照系統版本選擇下載,下載完成後,按照軟體提示一路Next安裝。
說明:如果你是Win10系統,安裝完成後,選擇抓包但是不顯示網絡卡,下載win10pcap相容性安裝包。下載路徑:win10pcap相容性安裝包
Wireshark 開始抓包示例
先介紹一個使用wireshark工具抓取ping命令操作的示例,讓讀者可以先上手操作感受一下抓包的具體過程。
1、開啟wireshark 2。6。5,主介面如下:
2、選擇選單欄上Capture -> Option,勾選WLAN網絡卡(這裡需要根據各自電腦網絡卡使用情況選擇,簡單的辦法可以看使用的IP對應的網絡卡)。點選Start。啟動抓包。
3、wireshark啟動後,wireshark處於抓包狀態中。
4、執行需要抓包的操作,如在cmd視窗下執行ping www。baidu。com。
5、操作完成後相關資料包就抓取到了。為避免其他無用的資料包影響分析,可以透過在過濾欄設定過濾條件進行資料包列表過濾,獲取結果如下。說明:ip。addr == 119。75。217。26 and icmp 表示只顯示ICPM協議且源主機IP或者目的主機IP為119。75。217。26的資料包。說明:協議名稱icmp要小寫。
5、wireshark抓包完成,就這麼簡單。關於wireshark顯示過濾條件、抓包過濾條件、以及如何檢視資料包中的詳細內容在後面介紹。
Wireshakr抓包介面介紹
說明:資料包列表區中不同的協議使用了不同的顏色區分。協議顏色標識定位在選單欄View ——> Coloring Rules。如下所示
WireShark 主要分為這幾個介面
1。 Display Filter(顯示過濾器), 用於設定過濾條件進行資料包列表過濾。選單路徑:Analyze ——> Display Filters。
2。 Packet List Pane(資料包列表), 顯示捕獲到的資料包,每個資料包包含編號,時間戳,源地址,目標地址,協議,長度,以及資料包資訊。不同協議的資料包使用了不同的顏色區分顯示。
3。 Packet Details Pane(資料包詳細資訊), 在資料包列表中選擇指定資料包,在資料包詳細資訊中會顯示資料包的所有詳細資訊內容。資料包詳細資訊面板是最重要的,用來檢視協議中的每一個欄位。各行資訊分別為
(1)Frame: 物理層的資料幀概況
(2)Ethernet II: 資料鏈路層乙太網幀頭部資訊
(3)Internet Protocol Version 4: 網際網路層IP包頭部資訊
(4)Transmission Control Protocol: 傳輸層T的資料段頭部資訊,此處是TCP
(5)Hypertext Transfer Protocol: 應用層的資訊,此處是HTTP協議
TCP包的具體內容
從下圖可以看到wireshark捕獲到的TCP包中的每個欄位。
4。 Dissector Pane(資料包位元組區)。
Wireshark過濾器設定
初學者使用wireshark時,將會得到大量的冗餘資料包列表,以至於很難找到自己需要抓取的資料包部分。wireshark工具中自帶了兩種型別的過濾器,學會使用這兩種過濾器會幫助我們在大量的資料中迅速找到我們需要的資訊。
(1)抓包過濾器
捕獲過濾器的選單欄路徑為Capture ——> Capture Filters。用於
在抓取資料包前設定。
如何使用?可以在抓取資料包前設定如下。
ip host 60。207。246。216 and icmp表示只捕獲主機IP為60。207。246。216的ICMP資料包。獲取結果如下:
(2)顯示過濾器
顯示過濾器是用於在抓取資料包後設置過濾條件進行過濾資料包。通常是在抓取資料包時設定條件相對寬泛或者沒有設定導致抓取的資料包內容較多時使用顯示過濾器設定條件過濾以方便分析。同樣上述場景,在捕獲時未設定抓包過濾規則直接透過網絡卡進行抓取所有資料包,如下
執行ping www。huawei。com獲取的資料包列表如下
觀察上述獲取的資料包列表,含有大量的無效資料。這時可以透過設定顯示器過濾條件進行提取分析資訊。ip。addr == 211。162。2。183 and icmp。並進行過濾。
上述介紹了抓包過濾器和顯示過濾器的基本使用方法。
在組網不復雜或者流量不大情況下,使用顯示器過濾器進行抓包後處理就可以滿足我們使用。
下面介紹一下兩者間的語法以及它們的區別。
wireshark過濾器表示式的規則
1、抓包過濾器語法和例項
抓包過濾器型別Type(host、net、port)、方向Dir(src、dst)、協議Proto(ether、ip、tcp、udp、http、icmp、ftp等)、邏輯運算子(&& 與、|| 或、!非)
(1)協議過濾
比較簡單,直接在抓包過濾框中直接輸入協議名即可。
tcp,只顯示TCP協議的資料包列表
http,只檢視HTTP協議的資料包列表
icmp,只顯示ICMP協議的資料包列表
(2)IP過濾
host 192。168。1。104
src host 192。168。1。104
dst host 192。168。1。104
(3)埠過濾
port 80
src port 80
dst port 80
(4)邏輯運算子&& 與、|| 或、!非
src host 192。168。1。104 && dst port 80 抓取主機地址為192。168。1。80、目的埠為80的資料包
host 192。168。1。104 || host 192。168。1。102 抓取主機為192。168。1。104或者192。168。1。102的資料包
!broadcast 不抓取廣播資料包
2、顯示過濾器語法和例項
(1)比較運算子
比較運算子有== 等於、!= 不等於、> 大於、< 小於、>= 大於等於、<=小於等於。
(2)協議過濾
比較簡單,直接在Filter框中直接輸入協議名即可。
注意:協議名稱需要輸入小寫。
tcp,只顯示TCP協議的資料包列表
http,只檢視HTTP協議的資料包列表
icmp,只顯示ICMP協議的資料包列表
(3) ip過濾
ip。src ==192。168。1。104 顯示源地址為192。168。1。104的資料包列表
ip。dst==192。168。1。104, 顯示目標地址為192。168。1。104的資料包列表
ip。addr == 192。168。1。104 顯示源IP地址或目標IP地址為192。168。1。104的資料包列表
(4)埠過濾
tcp。port ==80, 顯示源主機或者目的主機埠為80的資料包列表。
tcp。srcport == 80, 只顯示TCP協議的源主機埠為80的資料包列表。
tcp。dstport == 80,只顯示TCP協議的目的主機埠為80的資料包列表。
(5) Http模式過濾
http。request。method==“GET”, 只顯示HTTP GET方法的。
(6)邏輯運算子為 and/or/not
過濾多個條件組合時,使用and/or。比如獲取IP地址為192。168。1。104的ICMP資料包表示式為ip。addr == 192。168。1。104 and icmp
(7)按照資料包內容過濾。假設我要以IMCP層中的內容進行過濾,可以單擊選中介面中的碼流,在下方進行選中資料。如下
右鍵單擊選中後出現如下介面
選中Select後在過濾器中顯示如下
後面條件表示式就需要自己填寫。如下我想過濾出data資料包中包含“abcd”內容的資料流。
包含的關鍵詞是contains 後面跟上內容。
看到這, 基本上對wireshak有了初步瞭解。
Wireshark抓包分析TCP三次握手
(1)TCP三次握手連線建立過程
Step1:客戶端傳送一個SYN=1,ACK=0標誌的資料包給服務端,請求進行連線,這是第一次握手;
Step2:服務端收到請求並且允許連線的話,就會發送一個SYN=1,ACK=1標誌的資料包給傳送端,告訴它,可以通訊了,並且讓客戶端傳送一個確認資料包,這是第二次握手;
Step3:服務端傳送一個SYN=0,ACK=1的資料包給客戶端端,告訴它連線已被確認,這就是第三次握手。TCP連線建立,開始通訊。
(2)wireshark抓包獲取訪問指定服務端資料包
Step1:啟動wireshark抓包,開啟瀏覽器輸入www。huawei。com。
Step2:使用ping www。huawei。com獲取IP。
Step3:輸入過濾條件獲取待分析資料包列表 ip。addr == 211。162。2。183
圖中可以看到wireshark截獲到了三次握手的三個資料包。第四個包才是HTTP的, 這說明HTTP的確是使用TCP建立連線的。
第一次握手資料包
客戶端傳送一個TCP,標誌位為SYN,序列號為0, 代表客戶端請求建立連線。如下圖。
資料包的關鍵屬性如下:
SYN :標誌位,表示請求建立連線
Seq = 0 :初始建立連線值為0,資料包的相對序列號從0開始,表示當前還沒有傳送資料
Ack =0:初始建立連線值為0,已經收到包的數量,表示當前沒有接收到資料
第二次握手的資料包
伺服器發回確認包, 標誌位為 SYN,ACK。 將確認序號(Acknowledgement Number)設定為客戶的I S N加1以。即0+1=1, 如下圖
資料包的關鍵屬性如下:
[SYN + ACK]: 標誌位,同意建立連線,並回送SYN+ACK
Seq = 0 :初始建立值為0,表示當前還沒有傳送資料
Ack = 1:表示當前端成功接收的資料位數,雖然客戶端沒有傳送任何有效資料,確認號還是被加1,因為包含SYN或FIN標誌位。(並不會對有效資料的計數產生影響,因為含有SYN或FIN標誌位的包並不攜帶有效資料)
第三次握手的資料包
客戶端再次傳送確認包(ACK) SYN標誌位為0,ACK標誌位為1。並且把伺服器發來ACK的序號欄位+1,放在確定欄位中傳送給對方。並且在資料段放寫ISN的+1, 如下圖:
資料包的關鍵屬性如下:
ACK :標誌位,表示已經收到記錄
Seq = 1 :表示當前已經發送1個數據
Ack = 1 : 表示當前端成功接收的資料位數,雖然服務端沒有傳送任何有效資料,確認號還是被加1,因為包含SYN或FIN標誌位(並不會對有效資料的計數產生影響,因為含有SYN或FIN標誌位的包並不攜帶有效資料)。
就這樣通過了TCP三次握手,建立了連線。開始進行資料互動
下面針對資料互動過程的資料包進行一些說明:
資料包的關鍵屬性說明
Seq: 1
Ack: 1: 說明現在共收到1位元組資料
Seq: 1
Ack: 951: 說明現在服務端共收到951位元組資料
TCP的六種狀態:SYN, FIN, ACK, PSH, RST, URG
在TCP層,有個FLAGS欄位,這個欄位有以下幾個標識:
SYN(synchronous), FIN(Finish), ACK(Acknowledge ), PSH(Push), RST(Reset), URG(Urgent)
。如下
其中,對於我們日常的分析有用的就是前面的五個欄位。它們的含義是:SYN表示建立連線,FIN表示關閉連線,ACK表示響應,PSH表示有DATA資料傳輸,RST表示連線重置。
Wireshark抓包分析TCP四次揮手
四次揮手標誌分別為:
“[FIN, ACK]”
“[ACK]”
“[FIN, ACK]”
“[ACK]”
這裡,我們需要注意兩點:
(1)客戶端與伺服器端傳輸時全雙工的,因此斷開請求既可以由客戶端發起,也可以由伺服器端發起。只要找準第一次出現“[FIN, ACK]”的位置,就是第一次揮手位置。
(2)為什麼我們抓包抓到的不是“四次揮手”,而是“三次揮手”呢?
這裡涉及到LInux的TCP時延機制,當被揮手端(這裡是12672埠)第一次收到揮手端(這裡是443埠)的“FIN”請求時,並不會立即傳送ACK,而是會經過一段延遲時間後再發送,但是此時被揮手端也沒有資料傳送,就會向揮手端傳送“FIN“請求,這裡就可能造成被揮手端傳送的“FIN”與“ACK”一起被揮手端收到,導致出現“第二、三次揮手”合併為一次的現象,也就最終呈現出“三次揮手”的情況。
三次握手:
第一次握手:客戶端傳送syn包(seq=x)到伺服器,並進入SYN_SENT狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也傳送一個SYN包(seq=y),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器傳送確認包ACK(ack=y+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。
握手過程中傳送的包裡不包含資料,三次握手完畢後,客戶端與伺服器才正式開始傳送資料。理想狀態下,TCP連線一旦建立,在通訊雙方中的任何一方主動關閉連線之前,TCP 連線都將被一直保持下去。
四次揮手:
與建立連線的“三次握手”類似,斷開一個TCP連線則需要“四次握手”。
第一次揮手:主動關閉方傳送一個FIN,用來關閉主動方到被動關閉方的資料傳送,也就是主動關閉方告訴被動關閉方:我已經不 會再給你發資料了(當然,在fin包之前傳送出去的資料,如果沒有收到對應的ack確認報文,主動關閉方依然會重發這些資料),但是,此時主動關閉方還可 以接受資料。
第二次揮手:被動關閉方收到FIN包後,傳送一個ACK給對方,確認序號為收到序號+1(與SYN相同,一個FIN佔用一個序號)。
第三次揮手:被動關閉方傳送一個FIN,用來關閉被動關閉方到主動關閉方的資料傳送,也就是告訴主動關閉方,我的資料也傳送完了,不會再給你發資料了。
第四次揮手:主動關閉方收到FIN後,傳送一個ACK給被動關閉方,確認序號為收到序號+1,至此,完成四次揮手。
首先我們需要把瀏覽器的頁面關閉,也就是斷開TCP/IP連線,之後等待幾分鐘。會出現下面的畫面,方框就是“揮手”過程。
FAQ:使用wireshark出現很多TCP Retransmission資訊
出現TCP Retransmission多數是因為目標主機的埠沒開有開放監聽,很少出現是網路不好導致的。
如果在某個時間段(RTT的倍數)內沒有確認傳送的資料,則將資料重新傳輸到遠端主機。重傳超時從RTT開始,並隨著每次重傳而增加一倍。重傳超時總是受限於CFGZ-MNRTO和CFGYMax RTO。如果自從第一次傳輸資料以來,CFGY-ReTrExtTMO時間就過去了,連線被關閉,即狀態被設定為關閉。注意,當一個套接字被關閉時,將響應於接收到的埠所傳送的任何資料包來發送重置。
當超時發生時,將重新發送輸出視窗中的所有未確認資料。資料被重新打包,因此,包將不與原始包相同。例如,如果以10位元組的資料傳送分組,則傳送具有30位元組資料的分組,並且第一分組丟失,40位元組的未確認資料將在輸出視窗中。當超時發生時,所有40個位元組將在一個分組中傳送(假設MSS大於或等於40)。
如果接收到三個重複的確認,則快速重傳演算法無需等待超時即可重傳TCP資料。RTIP32還實現了RFC 2582中定義的NeReNeO快速恢復演算法。
轉載:https://blog。csdn。net/lemontree1945/article/details/88581516
類似場景:client 連線伺服器時,因 TLS 證書設定錯誤,所以會導致連線伺服器後,沒有收到應答;即傳送 SYN 報文,無響應。
Wireshark分析常用操作
調整資料包列表中時間戳顯示格式。調整方法為
View -->Time Display Format --> Date and Time of Day
。調整後格式如下: