一、wireshark是什么?
wireshark是非常流行的網(wǎng)絡(luò)封包分析軟件,簡(jiǎn)稱小鯊魚(yú),功能十分強(qiáng)大??梢越厝「鞣N網(wǎng)絡(luò)封包,顯示網(wǎng)絡(luò)封包的詳細(xì)信息。
wireshark是開(kāi)源軟件,可以放心使用??梢赃\(yùn)行在Windows和Mac OS上。對(duì)應(yīng)的,linux下的抓包工具是 tcpdump。使用wireshark的人必須了解網(wǎng)絡(luò)協(xié)議,否則就看不懂wireshark了。
二、Wireshark常用應(yīng)用場(chǎng)景
1. 網(wǎng)絡(luò)管理員會(huì)使用wireshark來(lái)檢查網(wǎng)絡(luò)問(wèn)題
2. 軟件測(cè)試工程師使用wireshark抓包,來(lái)分析自己測(cè)試的軟件
3. 從事socket編程的工程師會(huì)用wireshark來(lái)調(diào)試
4. 運(yùn)維人員用于日常工作,應(yīng)急響應(yīng)等等
總之跟網(wǎng)絡(luò)相關(guān)的東西,都可能會(huì)用到wireshark
三、Wireshark抓包原理
Wireshark使用WinPCAP作為接口,直接與網(wǎng)卡進(jìn)行數(shù)據(jù)報(bào)文交換。
Wireshark使用的環(huán)境大致分為兩種,一種是電腦直連網(wǎng)絡(luò)的單機(jī)環(huán)境,另外一種就是應(yīng)用比較多的網(wǎng)絡(luò)環(huán)境,即連接交換機(jī)的情況。
「單機(jī)情況」下,Wireshark直接抓取本機(jī)網(wǎng)卡的網(wǎng)絡(luò)流量;
「交換機(jī)情況」下,Wireshark通過(guò)端口鏡像、ARP欺騙等方式獲取局域網(wǎng)中的網(wǎng)絡(luò)流量。
端口鏡像:利用交換機(jī)的接口,將局域網(wǎng)的網(wǎng)絡(luò)流量轉(zhuǎn)發(fā)到指定電腦的網(wǎng)卡上。
ARP欺騙:交換機(jī)根據(jù)MAC地址轉(zhuǎn)發(fā)數(shù)據(jù),偽裝其他終端的MAC地址,從而獲取局域網(wǎng)的網(wǎng)絡(luò)流量。
四、Wireshark軟件安裝
軟件下載路徑:https://www.wireshark.org/
按照系統(tǒng)版本選擇下載,下載完成后,按照軟件提示一路Next安裝。
五、Wireshark抓包示例
先介紹一個(gè)使用wireshark工具抓取ping命令操作的示例,可以上手操作感受一下抓包的具體過(guò)程。
1、打開(kāi)wireshark,主界面如下:
2、選擇菜單欄上 捕獲 -> 選項(xiàng),勾選WLAN網(wǎng)卡。這里需要根據(jù)各自電腦網(wǎng)卡使用情況選擇,簡(jiǎn)單的辦法可以看使用的IP對(duì)應(yīng)的網(wǎng)卡。點(diǎn)擊Start,啟動(dòng)抓包。
3、wireshark啟動(dòng)后,wireshark處于抓包狀態(tài)中。
4、執(zhí)行需要抓包的操作,如在cmd窗口下執(zhí)行ping www.baidu.com。
5、操作完成后相關(guān)數(shù)據(jù)包就抓取到了,可以點(diǎn)擊 停止捕獲分組 按鈕。
6、為避免其他無(wú)用的數(shù)據(jù)包影響分析,可以通過(guò)在過(guò)濾欄設(shè)置過(guò)濾條件進(jìn)行數(shù)據(jù)包列表過(guò)濾,獲取結(jié)果如下。說(shuō)明:ip.addr == 183.232.231.172 and icmp 表示只顯示ICPM協(xié)議且主機(jī)IP為183.232.231.172的數(shù)據(jù)包。說(shuō)明:協(xié)議名稱icmp要小寫(xiě)。
7、wireshark抓包完成,并把本次抓包或者分析的結(jié)果進(jìn)行保存,就這么簡(jiǎn)單。關(guān)于wireshark顯示過(guò)濾條件、抓包過(guò)濾條件、以及如何查看數(shù)據(jù)包中的詳細(xì)內(nèi)容在后面介紹。
六、Wireshakr抓包界面介紹
Wireshark 的主界面包含6個(gè)部分:
菜單欄:用于調(diào)試、配置
工具欄:常用功能的快捷方式
過(guò)濾欄:指定過(guò)濾條件,過(guò)濾數(shù)據(jù)包
數(shù)據(jù)包列表:核心區(qū)域,每一行就是一個(gè)數(shù)據(jù)包
數(shù)據(jù)包詳情:數(shù)據(jù)包的詳細(xì)數(shù)據(jù)
數(shù)據(jù)包字節(jié):數(shù)據(jù)包對(duì)應(yīng)的字節(jié)流,二進(jìn)制
說(shuō)明:數(shù)據(jù)包列表區(qū)中不同的協(xié)議使用了不同的顏色區(qū)分。協(xié)議顏色標(biāo)識(shí)定位在菜單欄 視圖 --> 著色規(guī)則。如下所示
WireShark 主要分為這幾個(gè)界面
1. Display Filter(顯示過(guò)濾器)
用于設(shè)置過(guò)濾條件進(jìn)行數(shù)據(jù)包列表過(guò)濾。菜單路徑:分析 --> Display Filters。
2. Packet List Pane(數(shù)據(jù)包列表)
顯示捕獲到的數(shù)據(jù)包,每個(gè)數(shù)據(jù)包包含編號(hào),時(shí)間戳,源地址,目標(biāo)地址,協(xié)議,長(zhǎng)度,以及數(shù)據(jù)包信息。不同協(xié)議的數(shù)據(jù)包使用了不同的顏色區(qū)分顯示。
3. Packet Details Pane(數(shù)據(jù)包詳細(xì)信息)
在數(shù)據(jù)包列表中選擇指定數(shù)據(jù)包,在數(shù)據(jù)包詳細(xì)信息中會(huì)顯示數(shù)據(jù)包的所有詳細(xì)信息內(nèi)容。數(shù)據(jù)包詳細(xì)信息面板是最重要的,用來(lái)查看協(xié)議中的每一個(gè)字段。各行信息分別為
(1)Frame: 物理層的數(shù)據(jù)幀概況
(2)Ethernet II: 數(shù)據(jù)鏈路層以太網(wǎng)幀頭部信息
(3)Internet Protocol Version 4: 互聯(lián)網(wǎng)層IP包頭部信息
(4)Transmission Control Protocol: 傳輸層T的數(shù)據(jù)段頭部信息,此處是TCP
(5)Hypertext Transfer Protocol: 應(yīng)用層的信息,此處是HTTP協(xié)議
TCP包的具體內(nèi)容
從下圖可以看到wireshark捕獲到的TCP包中的每個(gè)字段。
4. Dissector Pane(數(shù)據(jù)包字節(jié)區(qū))
報(bào)文原始內(nèi)容。
七、Wireshark過(guò)濾器設(shè)置
初學(xué)者使用wireshark時(shí),將會(huì)得到大量的冗余數(shù)據(jù)包列表,以至于很難找到自己需要抓取的數(shù)據(jù)包部分。wireshark工具中自帶了兩種類型的過(guò)濾器,學(xué)會(huì)使用這兩種過(guò)濾器會(huì)幫助我們?cè)诖罅康臄?shù)據(jù)中迅速找到我們需要的信息。
1.抓包過(guò)濾器
捕獲過(guò)濾器的菜單欄路徑為 捕獲 --> 捕獲過(guò)濾器。用于在抓取數(shù)據(jù)包前設(shè)置。
如何使用呢?設(shè)置如下。
ip host 183.232.231.172表示只捕獲主機(jī)IP為183.232.231.172的數(shù)據(jù)包。獲取結(jié)果如下:
2. 顯示過(guò)濾器
顯示過(guò)濾器是用于在抓取數(shù)據(jù)包后設(shè)置過(guò)濾條件進(jìn)行過(guò)濾數(shù)據(jù)包。
通常是在抓取數(shù)據(jù)包時(shí)設(shè)置條件相對(duì)寬泛或者沒(méi)有設(shè)置導(dǎo)致抓取的數(shù)據(jù)包內(nèi)容較多時(shí)使用顯示過(guò)濾器設(shè)置條件過(guò)濾以方便分析。
執(zhí)行ping www.baidu.com獲取的數(shù)據(jù)包列表如下
觀察上述獲取的數(shù)據(jù)包列表,含有大量的無(wú)效數(shù)據(jù)。這時(shí)可以通過(guò)設(shè)置顯示器過(guò)濾條件進(jìn)行提取分析信息。ip.addr == 183.232.231.172,并進(jìn)行過(guò)濾。
上述介紹了抓包過(guò)濾器和顯示過(guò)濾器的基本使用方法。在組網(wǎng)不復(fù)雜或者流量不大情況下,使用顯示器過(guò)濾器進(jìn)行抓包后處理就可以滿足我們使用。下面介紹一下兩者間的語(yǔ)法以及它們的區(qū)別。
八、wireshark過(guò)濾器表達(dá)式的規(guī)則
1. 抓包過(guò)濾器語(yǔ)法和實(shí)例
抓包過(guò)濾器類型Type(host、net、port)、方向Dir(src、dst)、協(xié)議Proto(ether、ip、tcp、udp、http、icmp、ftp等)、邏輯運(yùn)算符(&&與、|| 或、!非)
(1)協(xié)議過(guò)濾
比較簡(jiǎn)單,直接在抓包過(guò)濾框中直接輸入?yún)f(xié)議名即可。
tcp,只顯示TCP協(xié)議的數(shù)據(jù)包列表
http,只查看HTTP協(xié)議的數(shù)據(jù)包列表
icmp,只顯示ICMP協(xié)議的數(shù)據(jù)包列表
(2)IP過(guò)濾
host 192.168.1.104
src host 192.168.1.104
dst host 192.168.1.104
(3)端口過(guò)濾
port 80
src port 80
dst port 80
(4)邏輯運(yùn)算符&&與、|| 或、!非
src host 192.168.1.104 &&dst port 80 抓取主機(jī)地址為192.168.1.80、目的端口為80的數(shù)據(jù)包
host 192.168.1.104 || host 192.168.1.102 抓取主機(jī)為192.168.1.104或者192.168.1.102的數(shù)據(jù)包
!broadcast 不抓取廣播數(shù)據(jù)包
2. 顯示過(guò)濾器語(yǔ)法和實(shí)例
(1)比較操作符
比較操作符有
== 等于、!= 不等于、> 大于、< 小于、>= 大于等于、<=小于等于
(2)協(xié)議過(guò)濾
比較簡(jiǎn)單,直接在Filter框中直接輸入?yún)f(xié)議名即可。注意:協(xié)議名稱需要輸入小寫(xiě)。
tcp,只顯示TCP協(xié)議的數(shù)據(jù)包列表
http,只查看HTTP協(xié)議的數(shù)據(jù)包列表
icmp,只顯示ICMP協(xié)議的數(shù)據(jù)包列表
(3) ip過(guò)濾
ip.src ==112.53.42.42 顯示源地址為112.53.42.42的數(shù)據(jù)包列表
ip.dst==112.53.42.42, 顯示目標(biāo)地址為112.53.42.42的數(shù)據(jù)包列表
ip.addr == 112.53.42.42 顯示源IP地址或目標(biāo)IP地址為112.53.42.42的數(shù)據(jù)包列表
(4)端口過(guò)濾
tcp.port ==80, 顯示源主機(jī)或者目的主機(jī)端口為80的數(shù)據(jù)包列表。
tcp.srcport == 80, 只顯示TCP協(xié)議的源主機(jī)端口為80的數(shù)據(jù)包列表。
tcp.dstport == 80,只顯示TCP協(xié)議的目的主機(jī)端口為80的數(shù)據(jù)包列表。
(5) http模式過(guò)濾
http.request.method=="GET", 只顯示HTTP GET方法的。
(6)邏輯運(yùn)算符為 and/or/not
過(guò)濾多個(gè)條件組合時(shí),使用and/or。比如獲取IP地址為192.168.0.104的ICMP數(shù)據(jù)包表達(dá)式為ip.addr == 192.168.0.104 and icmp
(7)按照數(shù)據(jù)包內(nèi)容過(guò)濾
假設(shè)我要以ICMP層中的內(nèi)容進(jìn)行過(guò)濾,可以單擊選中界面中的碼流,在下方進(jìn)行選中數(shù)據(jù)。
右鍵單擊選中后出現(xiàn)如下界面
選中后在過(guò)濾器中顯示如下
后面條件表達(dá)式就需要自己填寫(xiě)。如下我想過(guò)濾出data數(shù)據(jù)包中包含"abcd"內(nèi)容的數(shù)據(jù)流。關(guān)鍵詞是contains,完整條件表達(dá)式為data contains "abcd"
圖片
看到這, 基本上對(duì)wireshak有了初步了解。
3. 常見(jiàn)用顯示過(guò)濾需求及其對(duì)應(yīng)表達(dá)式
數(shù)據(jù)鏈路層:
篩選mac地址為043813:26的數(shù)據(jù)包
eth.src == 043813:26
篩選源mac地址為043813:26的數(shù)據(jù)包----
eth.src == 043813:26
網(wǎng)絡(luò)層:
篩選ip地址為192.168.1.1的數(shù)據(jù)包
ip.addr == 192.168.1.1
篩選192.168.1.0網(wǎng)段的數(shù)據(jù)
ip contains "192.168.1"
傳輸層:
篩選端口為80的數(shù)據(jù)包
tcp.port == 80
篩選12345端口和80端口之間的數(shù)據(jù)包
tcp.port == 12345 &&tcp.port == 80
篩選從12345端口到80端口的數(shù)據(jù)包
tcp.srcport == 12345 &&tcp.dstport == 80
應(yīng)用層:
特別說(shuō)明: http中http.request表示請(qǐng)求頭中的第一行(如GET index.jsp HTTP/1.1) http.response表示響應(yīng)頭中的第一行(如HTTP/1.1 200 OK),其他頭部都用http.header_name形式。
篩選url中包含.php的http數(shù)據(jù)包
http.request.uri contains ".php"
篩選內(nèi)容包含username的http數(shù)據(jù)包
http contains "username"
九、Wireshark抓包分析TCP三次握手
1. TCP三次握手連接建立過(guò)程
Step1:客戶端發(fā)送一個(gè)SYN=1,ACK=0標(biāo)志的數(shù)據(jù)包給服務(wù)端,請(qǐng)求進(jìn)行連接,這是第一次握手;
Step2:服務(wù)端收到請(qǐng)求并且允許連接的話,就會(huì)發(fā)送一個(gè)SYN=1,ACK=1標(biāo)志的數(shù)據(jù)包給發(fā)送端,告訴它,可以通訊了,并且讓客戶端發(fā)送一個(gè)確認(rèn)數(shù)據(jù)包,這是第二次握手;
Step3:服務(wù)端發(fā)送一個(gè)SYN=0,ACK=1的數(shù)據(jù)包給客戶端端,告訴它連接已被確認(rèn),這就是第三次握手。TCP連接建立,開(kāi)始通訊。
2. Wireshark抓包獲取訪問(wèn)指定服務(wù)端數(shù)據(jù)包
Step1:?jiǎn)?dòng)wireshark抓包,打開(kāi)瀏覽器輸入www.baidu.com。
Step2:使用ping www.baidu.com獲取IP。
Step3:輸入過(guò)濾條件獲取待分析數(shù)據(jù)包列表 ip.addr == 183.232.231.172
圖片
圖中可以看到wireshark截獲到了三次握手的三個(gè)數(shù)據(jù)包。第四個(gè)包才是HTTPS的, 這說(shuō)明HTTPS的確是使用TCP建立連接的。
第一次握手?jǐn)?shù)據(jù)包
客戶端發(fā)送一個(gè)TCP,標(biāo)志位為SYN,序列號(hào)為0, 代表客戶端請(qǐng)求建立連接。
圖片
數(shù)據(jù)包的關(guān)鍵屬性如下:
SYN :標(biāo)志位,表示請(qǐng)求建立連接
Seq = 0 :初始建立連接值為0,數(shù)據(jù)包的相對(duì)序列號(hào)從0開(kāi)始,表示當(dāng)前還沒(méi)有發(fā)送數(shù)據(jù)
Ack =0:初始建立連接值為0,已經(jīng)收到包的數(shù)量,表示當(dāng)前沒(méi)有接收到數(shù)據(jù)
第二次握手的數(shù)據(jù)包
服務(wù)器發(fā)回確認(rèn)包, 標(biāo)志位為 SYN,ACK。將確認(rèn)序號(hào)(Acknowledgement Number)字段+1,即0+1=1。
數(shù)據(jù)包的關(guān)鍵屬性如下:
[SYN + ACK]: 標(biāo)志位,同意建立連接,并回送SYN+ACK
Seq = 0 :初始建立值為0,表示當(dāng)前還沒(méi)有發(fā)送數(shù)據(jù)
Ack = 1:表示當(dāng)前端成功接收的數(shù)據(jù)位數(shù),雖然客戶端沒(méi)有發(fā)送任何有效數(shù)據(jù),確認(rèn)號(hào)還是被加1,因?yàn)榘琒YN或FIN標(biāo)志位。(并不會(huì)對(duì)有效數(shù)據(jù)的計(jì)數(shù)產(chǎn)生影響,因?yàn)楹蠸YN或FIN標(biāo)志位的包并不攜帶有效數(shù)據(jù))
第三次握手的數(shù)據(jù)包
客戶端再次發(fā)送確認(rèn)包(ACK) SYN標(biāo)志位為0,ACK標(biāo)志位為1。并且把服務(wù)器發(fā)來(lái)ACK的序號(hào)字段+1,放在確定字段中發(fā)送給對(duì)方,并且在Flag段寫(xiě)ACK的+1:
圖片
數(shù)據(jù)包的關(guān)鍵屬性如下:
ACK :標(biāo)志位,表示已經(jīng)收到記錄
Seq = 1 :表示當(dāng)前已經(jīng)發(fā)送1個(gè)數(shù)據(jù)
Ack = 1 : 表示當(dāng)前端成功接收的數(shù)據(jù)位數(shù),雖然服務(wù)端沒(méi)有發(fā)送任何有效數(shù)據(jù),確認(rèn)號(hào)還是被加1,因?yàn)榘琒YN或FIN標(biāo)志位(并不會(huì)對(duì)有效數(shù)據(jù)的計(jì)數(shù)產(chǎn)生影響,因?yàn)楹蠸YN或FIN標(biāo)志位的包并不攜帶有效數(shù)據(jù))。
就這樣通過(guò)了TCP三次握手,建立了連接。開(kāi)始進(jìn)行數(shù)據(jù)交互
十、Wireshark分析常用操作
調(diào)整數(shù)據(jù)包列表中時(shí)間戳顯示格式。調(diào)整方法為 視圖 -->時(shí)間顯示格式 --> 日期和時(shí)間。調(diào)整后格式如下:
一般Wireshark軟件也可以與各主流廠家的模擬器一起使用,更適合于項(xiàng)目準(zhǔn)確配置。
編輯:黃飛
-
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5425瀏覽量
171729 -
交換機(jī)
+關(guān)注
關(guān)注
21文章
2640瀏覽量
99646 -
數(shù)據(jù)包
+關(guān)注
關(guān)注
0文章
261瀏覽量
24396 -
過(guò)濾器
+關(guān)注
關(guān)注
1文章
429瀏覽量
19614 -
Wireshark
+關(guān)注
關(guān)注
0文章
49瀏覽量
6518
原文標(biāo)題:超詳細(xì)的Wireshark使用教程,看完速成高手!
文章出處:【微信號(hào):網(wǎng)絡(luò)技術(shù)干貨圈,微信公眾號(hào):網(wǎng)絡(luò)技術(shù)干貨圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論