Wireshark详细使用教程
簡介
Wireshark是一個網絡封包分析軟件。網絡封包分析軟件的功能是擷取網絡封包,并盡可能顯示出最為詳細的網絡封包資料。Wireshark使用WinPCAP作為接口,直接與網卡進行數據報文交換。WireShark可以比喻做硬件工程的萬用表、示波器,同樣我們網絡工程師或者軟件工程師可以利用wireshark來進行分析網絡。
wireshark可以做哪些事情?
1、利用wireshark進行tcp/ip知識的學習
在進行學習tcp/ip基礎知識尤其是網絡協議時異常枯燥,因為網絡的問題看不見摸不著,所以很難去深入地進行理解,而wireshark正是將這些知識以一種網絡數據包、可視化的形式給大獎呈現出來。
常見的tcp、udp、icmp、mqtt、http、ftp、pop3、tftp、dns、dhcp等,我們利用wireshark學習這些協議可以起到事半功倍的效果,我們將在接下來的一些列的博文中來介紹常見的tcp/ip協議。
2、利用wireshark工具進行網絡問題的分析
wireshark問題通常都比較復雜,我們可以利用wireshark進行常見網絡問題的分析,但是這一部分同時又涉及到tcp/ip的基礎知識,在學習完基礎的tcp/ip基礎知識后,就可以利用Wireshark進行網絡問題進行分析。通常利用wireshark解析以下幾種常見問題:
- 網絡斷開的問題
- 網絡數據是否發送以及發送的數據是否正確
- 網絡流量統計
- 利用wireshark進行常見應用層問題分析
3、對于未知的協議進行抓包分析
在有些情況我們不知道設備端口號、ip地址,我們同樣也可以利用wireshark進行問題的分析,定位問題。
下載及安裝
windows下安裝
安裝方法如下:
選項已被勾選,如圖 3-2 所示,然后單擊 Install。安裝過程便會隨即開始。
Finish。
linux下安裝
添加wireshark 下載鏈接地址,然后更新軟件源
sudo apt-add-repository ppa:wireshark-dev/stable
sudo apt-get update
在命令行安裝wireshark
sudo apt-get install wireshark
安裝過程選擇yes,非root用戶也能抓包
后續配置,新建wireshark 用戶組,把當前用戶加入wireshark 用戶組
sudo groupadd wireshark
sudo chgrp wireshark /usr/bin/dumpcap
sudo chmod 4755 /usr/bin/dumpcap
sudo gpasswd -a your_username wireshark
第一條命令是 新建wireshark 用戶組,二、三條命令是配置和添加權限。第四條命令中的your_username 是當前系統的用戶名。
安裝完成啦,可以使用了
Wireshark 初步入門
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的數據包。
6.到此完成。
主界面介紹
整體來說,界面主要分為以下幾部分:
-
菜單欄:Wireshark的標準菜單欄。
-
工具欄:常用功能的快捷圖標按鈕,提供快速訪問菜單中經常用到的項目的功能。
-
過濾器:提供處理當前顯示過濾得方法。
-
Packet List面板:顯示每個數據幀的摘要。這里采用表格的形式列出了當前捕獲文件中的所有數據包,其中包括了數據包序號、數據包捕獲的相對時間、數據包的源地址和目標地址、數據包的協議以及在數據包中找到的概況信息等。
-
Packet Details面板:分析數據包的詳細信息。這個面板分層次地顯示了一個數據包中的內容,并且可以通過展開或是收縮來顯示這個數據包中所捕獲的全部內容。
-
Packet Bytes面板:以十六進制和ASCII碼的形式顯示數據包的內容。這里顯 示了一個數據包未經處理的原始樣子,也就是在鏈路上傳播時的樣子。
-
狀態欄:包含有專家信息、注釋、包的數量和Profile。
菜單欄
File(文件) ——包括打開、合并捕捉文件,save/保存,Print/打印,Export/導出,捕捉文件的全部或部分。以及退出Wireshark 項。
Edit(編輯)——包括如下項目:查找包,時間參考,標記一個多個包,設置預設參數。(剪切,拷貝,粘貼不能立即執行。)
View(視圖) ——控制捕捉數據的顯示方式,包括顏色,字體縮放,將包顯示在分離的窗口,展開或收縮詳情面版的地樹狀節點
GO(跳轉) ——包含到指定包的功能。
Capture(捕獲)——控制抓包的對話框,包括接口,選項,開始/停止/重新開始和過濾器。
Analyze(分析) ——包含處理顯示過濾,允許或禁止分析協議,配置用戶指定解碼和追蹤TCP 流等功能。
Statistics(統計) ——包括的菜單項用戶顯示多個統計窗口,包括關于捕捉包的摘要,協議層次統計等等。
Help(幫助) ——包含一些輔助用戶的參考內容。如訪問一些基本的幫助文件,支持的協議列表,用戶手冊。
工具欄
①——使用最后一次的捕捉設置立即開始捕捉
②——停止當前捕捉
③——停止當前捕捉并立即重新開始
④——打開捕獲窗口
過濾器
當進行數據包捕獲時,只有那些滿足給定的包含/排除表達式的數據包會被捕獲。
常見的過濾條件有:
過濾源ip、目的ip——如查找目的地址為192.168.101.8的包,ip.dst192.168.101.8;查找源地址為ip.src1.1.1.1。
端口過濾——如過濾80端口,在Filter中輸入,tcp.port80,這條規則是把源端口和目的端口為80的都過濾出來。使用tcp.dstport80只過濾目的端口為80的,tcp.srcport==80只過濾源端口為80的包。
協議過濾——比較簡單,直接在Filter框中直接輸入協議名即可,如過濾HTTP的協議
http模式過濾——如過濾get包,http.request.method==“GET”,過濾post包,http.request.method==“POST”
連接符and——過濾兩種條件時,使用and連接,如過濾ip為192.168.101.8并且為http協議的,ip.src==192.168.101.8 and http。
Packet List面板
列表中的每行顯示捕捉文件的一個包。如果您選擇其中一行,該包得更多情況會顯示在"Packet Detail/包詳情","Packet Byte/包字節"面板。
Packet List面板中默認包含了幾列,如No、Time、Source和Destination等。
- No. 包的編號,編號不會發生改變,即使進行了過濾也同樣如此
- Time 包的時間戳。包時間戳的格式可以自行設置,見第 6.10 節 “時間顯示格式及參考時間”
- Source 顯示包的源地址。
- Destination 顯示包的目標地址。
- Protocal 顯示包的協議類型的簡寫
- Info 包內容的附加信息
Packet Details面板
該面板顯示包列表面板選中包的協議及協議字段,協議及字段以樹狀方式組織。可以展開或折疊進行查看。
Packet Bytes面板
通常在16進制轉儲形式中,左側顯示包數據偏移量,中間欄以16進制表示,右側顯示為對應的ASCII字符。
狀態欄
通常狀態欄的左側會顯示相關上下文信息,右側會顯示當前包數目。
Wireshark過濾器設置
初學者使用wireshark時,將會得到大量的冗余數據包列表,以至于很難找到自己自己抓取的數據包部分。wireshar工具中自帶了兩種類型的過濾器,學會使用這兩種過濾器會幫助我們在大量的數據中迅速找到我們需要的信息。
捕獲過濾器
捕獲過濾器的菜單欄路徑為Capture --> Capture Filters。用于在抓取數據包前設置。
如何使用?可以在抓取數據包前設置如下。
ip host 60.207.246.216 and icmp表示只捕獲主機IP為60.207.246.216的ICMP數據包。獲取結果如下:
顯示過濾器
顯示過濾器是用于在抓取數據包后設置過濾條件進行過濾數據包。通常是在抓取數據包時設置條件相對寬泛,抓取的數據包內容較多時使用顯示過濾器設置條件顧慮以方便分析。同樣上述場景,在捕獲時未設置捕獲規則直接通過網卡進行抓取所有數據包,如下
執行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 后面跟上內容。
Wireshark分析三次握手
wireshark能獲取HTTP,也能獲取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的內容,總結,如果是處理HTTP,HTTPS 還是用Fiddler, 其他協議比如TCP,UDP 就用wireshark.
封包詳細信息與對應的OSI模型
TCP三次握手過程圖
第一次握手:
? 建立連接時,客戶端發送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包的具體內容
從下圖可以看到wireshark捕獲到的TCP包中的每個字段。
TCP標志的意義
-
SYN:Synchronize,用于初始化和建立連接,它同時也用于同步設備之間的序列號(Seq)
-
ACK:Acknolowege,向另一方確認它已收到SYN
-
Seq:Sequence number,序列號,用于表示曾經發送過數據的字節數+1
-
Len:用于表示收到的字節大小,0表示本次沒有收到數據
-
FIN:用于結束連接
注意:
即使Seq不為0,并不表示曾經一定發送過數據,是否發送過數據需要依據Len指令的值有沒有大于0的來判斷。
3次握手和4次揮手過程中一般是不會傳送數據的,所以這個過程中Len指令都是0
三次握手分析:
1.打開wireshark, 輸入捕獲過濾器為:tcp,顯示過濾器為:tcp.port == 80,選擇我連接網絡的網卡為:WLAN
2.點擊右上角開始捕獲分組,進入捕獲界面
3.打開瀏覽器輸入 http://www.aigony.com ,接下來即可看到捕獲信息
圖中可以看到wireshark截獲到了三次握手的三個數據包。第四個包才是HTTP的, 這說明HTTP的確是使用TCP建立連接的。
第一次握手數據包
客戶端向服務器發送連接請求包,標志位SYN(同步序號)置為1,序號Seq為X=0,如下圖
第二次握手的數據包
服務器收到客戶端發過來的報文,由SYN=1知道客戶端要求建立連接。服務器發回確認包, 標志位SYN和ACK都置為1。 將確認序號(Acknowledgement Number)設置為客戶端的Seq+1,即X+1= 0+1=1, 如下圖
第三次握手的數據包
客戶端收到服務器發來的包后檢查確認序號(Acknowledgement Number)是否正確,即第一次發送的序號加1(X+1=1)。以及標志位ACK是否為1。若正確,客戶端再次發送確認包(ACK),SYN標志位為0,ACK標志位為1。 確認序號(Acknowledgement Number)為Y+= 0+1= 1,發送序號Seq為X+1=1。服務器收到后確認序號值與ACK=1則連接建立成功,可以傳送數據了。 如下
就這樣通過TCP三次握手,建立了HTTP連接 。
總結
以上是生活随笔為你收集整理的Wireshark详细使用教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试的支付流程图,软件测试流程图案例
- 下一篇: 基于JAVA宠物店管理系统设计与实现计算