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。調整後格式如下:
wireshark的基本使用方法有數據包篩選、數據包搜索、數據包還原、 數據提取四個部分。
數據包篩選
1.1篩選ip
源篩選ip
ip.src == ip 地址
或者手動操作
點擊任意一個符合篩選條件的數據包,找到IPv4下的Source字段。
右鍵點擊Source字段,作爲過濾器應用 – 選中。
目的ip篩選
ip.dst == ip地址
或者手動操作:
點擊任意一個符合篩選條件的數據包,找到IPv4下的Destination字段,右鍵點擊Destination字段,作爲過濾器應用 – 選中。
1.2 mac地址篩選:
eth.dst ==A0:00:00:04:C5:84 篩選目標mac地址
eth.addr==A0:00:00:04:C5:84 篩選MAC地址
1.3 端口篩選:
tcp.dstport == 80 篩選tcp協議的目標端口爲80 的流量包
tcp.srcport == 80 篩選tcp協議的源端口爲80 的流量包
udp.srcport == 80 篩選udp協議的源端口爲80 的流量包
1.4 協議篩選:
tcp 篩選協議爲tcp的流量包
udp 篩選協議爲udp的流量包
arp/icmp/http/ftp/dns/ip 篩選協議爲arp/icmp/http/ftp/dns/ip的流量包
1.5 包長度篩選:
udp.length ==20 篩選長度爲20的udp流量包
tcp.len >=20 篩選長度大於20的tcp流量包
ip.len ==20 篩選長度爲20的IP流量包
frame.len ==20 篩選長度爲20的整個流量包
1.6 http請求篩選
請求方法爲GET:http.request.method==“GET”篩選HTTP請求方法爲GET的 流量包
請求方法爲POST:http.request.method==“POST”篩選HTTP請求方法爲POST的流量包
指定URI:http.request.uri==“/img/logo-edu.gif”篩選HTTP請求的URL爲/img/logo-edu.gif的流量包
請求或相應中包含特定內容:http contains “FLAG” 篩選HTTP內容爲/FLAG的流量包
2.數據包搜索
在wireshark界面按“Ctrl+F”,可以進行關鍵字搜索:
Wireshark的搜索功能支持正則表達式、字符串、十六進制等方式進行搜索,通常情況下直接使用字符串方式進行搜索。
搜索欄的左邊下拉,有分組列表、分組詳情、分組字節流三個選項,分別對應wireshark界面的三個部分,搜索時選擇不同的選項以指定搜索區域:
搜索欄的左邊下拉,有分組列表、分組詳情、分組字節流三個選項,分別對應wireshark界面的三個部分,搜索時選擇不同的選項以指定搜索區域
這是分組列表
這是分組詳情:
分組字節流:
3. 數據包還原
在wireshark中,存在一個交追蹤流的功能,可以將HTTP或TCP流量集合在一起並還原成原始數據,具體操作方式如下:
選中想要還原的流量包,右鍵選中,選擇追蹤流 – TCP流/UPD流/SSL流/HTTP流。
可在彈出的窗口中看到被還原的流量信息:
4. 數據提取
Wireshark支持提取通過http傳輸(上傳/下載)的文件內容,方法如下:
選中http文件傳輸流量包,在分組詳情中找到data或者Line-based text data:text/html層,鼠標右鍵點擊 – 選中 導出分組字節流。
如果是菜刀下載文件的流量,需要刪除分組字節流前開頭和結尾的X@Y字符,否則下載的文件會出錯。鼠標右鍵點擊 – 選中 顯示分組字節…
在彈出的窗口中設置開始和結束的字節(原字節數開頭加3,結尾減3)
最後點擊save as按鈕導出。