wireshark 抓包新手使用教程
Wireshark 是非常流行的網絡封包分析軟件,可以截取各種網絡數據包,並顯示數據包詳細信息。常用於開發測試過程各種問題定位。本文主要內容包括:
1、Wireshark 軟件下載和安裝以及 Wireshark 主界面介紹。
2、WireShark 簡單抓包示例。通過該例子學會怎么抓包以及如何簡單查看分析數據包內容。
3、Wireshark 過濾器使用。通過過濾器可以篩選出想要分析的內容。包括按照協議過濾、端口和主機名過濾、數據包內容過濾。
Wireshark 軟件安裝
軟件下載路徑:wireshark 官網。按照系統版本選擇下載,下載完成后,按照軟件提示一路 Next 安裝。
如果你是 Win10 系統,安裝完成后,選擇抓包但是不顯示網卡,下載 win10pcap 兼容性安裝包。下載路徑:win10pcap 兼容性安裝包
Wireshark 開始抓包示例
先介紹一個使用 wireshark 工具抓取 ping 命令操作的示例,讓讀者可以先上手操作感受一下抓包的具體過程。
1、打開 wireshark 2.6.5,主界面如下:
2、選擇菜單欄上 Capture -> Option,勾選 WLAN 網卡(這里需要根據各自電腦網卡使用情況選擇,簡單的辦法可以看使用的 IP 對應的網卡)。點擊 Start。啟動抓包。
3、wireshark 啟動后,wireshark 處於抓包狀態中。
4、執行需要抓包的操作,如 ping www.baidu.com。
5、操作完成后相關數據包就抓取到了。為避免其他無用的數據包影響分析,可以通過在過濾欄設置過濾條件進行數據包列表過濾,獲取結果如下。說明:ip.addr == 119.75.217.26 and icmp 表示只顯示 ICPM 協議且源主機 IP 或者目的主機 IP 為 119.75.217.26 的數據包。
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 時,將會得到大量的冗余數據包列表,以至於很難找到自己自己抓取的數據包部分。wireshar 工具中自帶了兩種類型的過濾器,學會使用這兩種過濾器會幫助我們在大量的數據中迅速找到我們需要的信息。
(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 層,有個 FLAGS 字段,這個字段有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG。如下
其中,對於我們日常的分析有用的就是前面的五個字段。它們的含義是:SYN 表示建立連接,FIN 表示關閉連接,ACK 表示響應,PSH 表示有 DATA 數據傳輸,RST 表示連接重置。
Wireshark 分析常用操作
調整數據包列表中時間戳顯示格式。調整方法為 View -->Time Display Format --> Date and Time of Day。調整后格式如下:
參考文檔
出處:https://www.cnblogs.com/linyfeng/p/9496126.html
Wireshark 是非常流行的網絡封包分析軟件,可以截取各種網絡數據包,並顯示數據包詳細信息。常用於開發測試過程各種問題定位。本文主要內容包括:
1、Wireshark 軟件下載和安裝以及 Wireshark 主界面介紹。
2、WireShark 簡單抓包示例。通過該例子學會怎么抓包以及如何簡單查看分析數據包內容。
3、Wireshark 過濾器使用。通過過濾器可以篩選出想要分析的內容。包括按照協議過濾、端口和主機名過濾、數據包內容過濾。
Wireshark 軟件安裝
軟件下載路徑:wireshark 官網。按照系統版本選擇下載,下載完成后,按照軟件提示一路 Next 安裝。
如果你是 Win10 系統,安裝完成后,選擇抓包但是不顯示網卡,下載 win10pcap 兼容性安裝包。下載路徑:win10pcap 兼容性安裝包
Wireshark 開始抓包示例
先介紹一個使用 wireshark 工具抓取 ping 命令操作的示例,讓讀者可以先上手操作感受一下抓包的具體過程。
1、打開 wireshark 2.6.5,主界面如下:
2、選擇菜單欄上 Capture -> Option,勾選 WLAN 網卡(這里需要根據各自電腦網卡使用情況選擇,簡單的辦法可以看使用的 IP 對應的網卡)。點擊 Start。啟動抓包。
3、wireshark 啟動后,wireshark 處於抓包狀態中。
4、執行需要抓包的操作,如 ping www.baidu.com。
5、操作完成后相關數據包就抓取到了。為避免其他無用的數據包影響分析,可以通過在過濾欄設置過濾條件進行數據包列表過濾,獲取結果如下。說明:ip.addr == 119.75.217.26 and icmp 表示只顯示 ICPM 協議且源主機 IP 或者目的主機 IP 為 119.75.217.26 的數據包。
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 時,將會得到大量的冗余數據包列表,以至於很難找到自己自己抓取的數據包部分。wireshar 工具中自帶了兩種類型的過濾器,學會使用這兩種過濾器會幫助我們在大量的數據中迅速找到我們需要的信息。
(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 層,有個 FLAGS 字段,這個字段有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG。如下
其中,對於我們日常的分析有用的就是前面的五個字段。它們的含義是:SYN 表示建立連接,FIN 表示關閉連接,ACK 表示響應,PSH 表示有 DATA 數據傳輸,RST 表示連接重置。
Wireshark 分析常用操作
調整數據包列表中時間戳顯示格式。調整方法為 View -->Time Display Format --> Date and Time of Day。調整后格式如下: