Wireshark是非常流行的網(wǎng)絡(luò)封包分析軟件,可以截取各種網(wǎng)絡(luò)數(shù)據(jù)包,并顯示數(shù)據(jù)包詳細(xì)信息。常用于開發(fā)測試過程各種問題定位。
本文主要內(nèi)容包括:
1、Wireshark軟件下載和安裝。
2、WireShark簡單抓包示例。通過該例子學(xué)會怎么抓包以及如何簡單查看分析數(shù)據(jù)包內(nèi)容。
3、Wireshark過濾器使用。通過過濾器可以篩選出想要分析的內(nèi)容。包括按照協(xié)議過濾、端口和主機(jī)名過濾、數(shù)據(jù)包內(nèi)容過濾。
\\172.21.53.10正版軟件中有wiresharp的安裝包,一路next下來,進(jìn)行安裝。
先介紹一個使用wireshark工具抓取ping命令操作的示例,讓讀者可以先上手操作感受一下抓包的具體過程。
1、打開wireshark ,主界面如下:

2、選擇菜單欄上捕獲 -> 選項(xiàng),勾選以太網(wǎng)。點(diǎn)擊Start。啟動抓包。

3、wireshark啟動后,wireshark處于抓包狀態(tài)中。

4、執(zhí)行需要抓包的操作,如ping www.baidu.com。
5、操作完成后相關(guān)數(shù)據(jù)包就抓取到了。為避免其他無用的數(shù)據(jù)包影響分析,可以通過在過濾欄設(shè)置過濾條件進(jìn)行數(shù)據(jù)包列表過濾,獲取結(jié)果如下。說明:ip.addr == 172.21.161.4 and icmp 表示只顯示ICPM協(xié)議且源主機(jī)IP或者目的主機(jī)IP為172.21.161.4的數(shù)據(jù)包。

wireshark抓包完成,就這么簡單。關(guān)于wireshark過濾條件和如何查看數(shù)據(jù)包中的詳細(xì)內(nèi)容在后面介紹。
Wireshakr抓包界面

說明:數(shù)據(jù)包列表區(qū)中不同的協(xié)議使用了不同的顏色區(qū)分。協(xié)議顏色標(biāo)識定位在菜單欄視圖--> 著色規(guī)則如下所示

WireShark 主要分為這幾個界面
1. Display Filter(顯示過濾器),? 用于設(shè)置過濾條件進(jìn)行數(shù)據(jù)包列表過濾。菜單路徑:Analyze --> Display Filters。

2. Packet List Pane(數(shù)據(jù)包列表), 顯示捕獲到的數(shù)據(jù)包,每個數(shù)據(jù)包包含編號,時間戳,源地址,目標(biāo)地址,協(xié)議,長度,以及數(shù)據(jù)包信息。 不同協(xié)議的數(shù)據(jù)包使用了不同的顏色區(qū)分顯示。

3. Packet Details Pane(數(shù)據(jù)包詳細(xì)信息), 在數(shù)據(jù)包列表中選擇指定數(shù)據(jù)包,在數(shù)據(jù)包詳細(xì)信息中會顯示數(shù)據(jù)包的所有詳細(xì)信息內(nèi)容。數(shù)據(jù)包詳細(xì)信息面板是最重要的,用來查看協(xié)議中的每一個字段。各行信息分別為
? (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é)議
初學(xué)者使用wireshark時,將會得到大量的冗余數(shù)據(jù)包列表,以至于很難找到自己自己抓取的數(shù)據(jù)包部分。wireshar工具中自帶了兩種類型的過濾器,學(xué)會使用這兩種過濾器會幫助我們在大量的數(shù)據(jù)中迅速找到我們需要的信息。
(1)抓包過濾器
捕獲過濾器的菜單欄路徑為捕獲--> 捕獲過濾器。用于在抓取數(shù)據(jù)包前設(shè)置。

?如何使用?可以在抓取數(shù)據(jù)包前設(shè)置如下。
捕獲--> 選項(xiàng)

ip host 172.21.161.4 and icmp表示只捕獲主機(jī)IP為172.21.161.4的ICMP數(shù)據(jù)包。獲取結(jié)果如下:

(2)顯示過濾器
? 顯示過濾器是用于在抓取數(shù)據(jù)包后設(shè)置過濾條件進(jìn)行過濾數(shù)據(jù)包。通常是在抓取數(shù)據(jù)包時設(shè)置條件相對寬泛,抓取的數(shù)據(jù)包內(nèi)容較多時使用顯示過濾器設(shè)置條件顧慮以方便分析。同樣上述場景,在捕獲時未設(shè)置捕獲規(guī)則直接通過網(wǎng)卡進(jìn)行抓取所有數(shù)據(jù)包,如下

執(zhí)行ping www.baidu.com獲取的數(shù)據(jù)包列表如下

觀察上述獲取的數(shù)據(jù)包列表,含有大量的無效數(shù)據(jù)。這時可以通過設(shè)置顯示器過濾條件進(jìn)行提取分析信息。ip.addr == 172.21.161.4。并進(jìn)行過濾。

? 上述介紹了抓包過濾器和顯示過濾器的基本使用方法。在組網(wǎng)不復(fù)雜或者流量不大情況下,使用顯示器過濾器進(jìn)行抓包后處理就可以滿足我們使用。下面介紹一下兩者間的語法以及它們的區(qū)別。
wireshark過濾器表達(dá)式的規(guī)則
1、抓包過濾器語法和實(shí)例
?? 抓包過濾器類型Type(host、net、port)、方向Dir(src、dst)、協(xié)議Proto(ether、ip、tcp、udp、http、icmp、ftp等)、邏輯運(yùn)算符(&& 與、|| 或、!非)
(1)協(xié)議過濾
? 比較簡單,直接在抓包過濾框中直接輸入?yún)f(xié)議名即可。
? TCP,只顯示TCP協(xié)議的數(shù)據(jù)包列表
? HTTP,只查看HTTP協(xié)議的數(shù)據(jù)包列表
? ICMP,只顯示ICMP協(xié)議的數(shù)據(jù)包列表
(2)IP過濾
? host 172.21.161.4
? src host 172.21.161.4
? dst host 172.21.161.4
(3)端口過濾
? port 80
? src port 80
? dst port 80
(4)邏輯運(yùn)算符&& 與、|| 或、!非
? src host 172.21.161.4 && dst port 80 抓取主機(jī)地址為192.168.1.80、目的端口為80的數(shù)據(jù)包
? host 172.21.161.4 || host 192.168.1.102 抓取主機(jī)為172.21.161.4或者192.168.1.102的數(shù)據(jù)包
? !broadcast 不抓取廣播數(shù)據(jù)包
2、顯示過濾器語法和實(shí)例
(1)比較操作符
? 比較操作符有== 等于、!= 不等于、> 大于、< 小于、>= 大于等于、<=小于等于。
(2)協(xié)議過濾
? 比較簡單,直接在Filter框中直接輸入?yún)f(xié)議名即可。注意:協(xié)議名稱需要輸入小寫。
? tcp,只顯示TCP協(xié)議的數(shù)據(jù)包列表
? http,只查看HTTP協(xié)議的數(shù)據(jù)包列表
? icmp,只顯示ICMP協(xié)議的數(shù)據(jù)包列表

(3) ip過濾
?? ip.src ==172.21.161.4 顯示源地址為172.21.161.4的數(shù)據(jù)包列表
?? ip.dst==172.21.161.4, 顯示目標(biāo)地址為172.21.161.4的數(shù)據(jù)包列表
?? ip.addr == 172.21.161.4 顯示源IP地址或目標(biāo)IP地址為 172.21.161.4的數(shù)據(jù)包列表

(4)端口過濾
? 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模式過濾
? http.request.method=="GET",?? 只顯示HTTP GET方法的。
(6)邏輯運(yùn)算符為 and/or/not
? 過濾多個條件組合時,使用and/or。比如獲取IP地址為172.21.161.4的ICMP數(shù)據(jù)包表達(dá)式為ip.addr == 172.21.161.4 and icmp

(7)按照數(shù)據(jù)包內(nèi)容過濾。假設(shè)我要以IMCP層中的內(nèi)容進(jìn)行過濾,可以單擊選中界面中的碼流,在下方進(jìn)行選中數(shù)據(jù)。如下

右鍵單擊選中后出現(xiàn)如下界面

選中Select后在過濾器中顯示如下

后面條件表達(dá)式就需要自己填寫。如下我想過濾出data數(shù)據(jù)包中包含"abcd"內(nèi)容的數(shù)據(jù)流。包含的關(guān)鍵詞是contains 后面跟上內(nèi)容。
至此,便學(xué)習(xí)了wireshark基礎(chǔ)的應(yīng)用。

先來講一下什么是arp包,ARP(Address Resolution Protocol)即地址解析協(xié)議,其基本功能為通過目標(biāo)設(shè)備的IP地址,查詢目標(biāo)設(shè)備的MAC地址,以保證通信的順利進(jìn)行。
以主機(jī)A(172.21.53.45)向主機(jī)B(172.21.53.254)發(fā)送數(shù)據(jù)為例。當(dāng)發(fā)送數(shù)據(jù)時,主機(jī)A會在自己的ARP緩存表中尋找是否有目標(biāo)IP地址。如果找到了,也就知道了目標(biāo)MAC地址為(00-BB-00-62-C2-02),直接把目標(biāo)MAC地址寫入幀里面發(fā)送就可以了;如果在ARP緩存表中沒有找到相對應(yīng)的IP地址,主機(jī)A就會在網(wǎng)絡(luò)上發(fā)送一個廣播(ARP request),目標(biāo)MAC地址是“FF.FF.FF.FF.FF.FF”,這表示向同一網(wǎng)段內(nèi)的所有主機(jī)發(fā)出這樣的詢 問:“172.21.53.254的MAC地址是什么?”網(wǎng)絡(luò)上其他主機(jī)并不響應(yīng)ARP詢問,只有主機(jī)B接收到這個幀時,才向主機(jī)A做出這樣的回應(yīng)(ARP response):“172.21.53.254的MAC地址是(00-BB-00-62-C2-02)”。 這樣,主機(jī)A就知道了主機(jī)B的MAC地址,它就可以向主機(jī)B發(fā)送信息了。同時它還更新了自己的ARP緩存表,下次再向主機(jī)B發(fā)送信息時,直接從ARP緩存表里查找就可以了。ARP緩存表采用了老化機(jī)制,在一段時間內(nèi)如果表中的某一行沒有使用,就會被刪除,這樣可以大大減少ARP緩存表的長度,加快查詢速度。
接下來看看arp緩沖表,打開計(jì)算機(jī)的運(yùn)行,輸入cmd,回車

輸入arp -a

那我們就去ping一個arp表中沒有的IP,在cmd中ping 172.21.53.254,接下來是操作步驟。
[if !supportLists](1)[endif]打開軟件,選擇“捕獲”-“選項(xiàng)”-“以太網(wǎng)”-“開始”

[if !supportLists](2)[endif]此時會有海量的數(shù)據(jù)包,為了便于分析,我們使用過濾器輸入“arp”以篩選出arp報文。

[if !supportLists](3)[endif]打開dos窗口,輸入ping 172.21.53.254

[if !supportLists](4)[endif]在wireshark中抓包,找到這個包

[if !supportLists](5)[endif]但是選取以下的發(fā)送和接收的報文進(jìn)行分析,arp一次請求由廣播的請求報文和單播的應(yīng)答報文組成,所以這一組報文的源MAC地址和目的MAC地址是對調(diào)的??梢钥匆幌翴nfo的信息很有意思,請求報文廣播說“誰有172.21.53.254的mac地址?告訴172.21.53.45吧!”,響應(yīng)的報文對請求的地址單播說“172.21.53.254的mac地址是00:3c:10:50:0a:e6”
[if !supportLists](6)[endif]下面的Address ResolutionProtocol就是arp協(xié)議,這個報文是請求包,因?yàn)槟繕?biāo)的MAC地址是全0

[if !supportLists](7)[endif]具體的字段解釋如下,源IP是172.21.53.45,目的IP是172.21.53.254,但是不知道具體的目的地的mac地址。

[if !supportLists](8)[endif]以下是響應(yīng)包的內(nèi)容

它在響應(yīng)包里面把mac地址補(bǔ)全,單播發(fā)給了源地址172.21.53.45
(9)回到dos窗口,輸入arp -a,可以看到172.21.53.254的mac地址已經(jīng)記錄在ARP緩存表了。

同樣,先來了解一下什么是ICMP?
(1)ICMP是“Internet Control Message Protocol”(Internet控制消息協(xié)議)的縮寫。它是TCP/IP協(xié)議族的一個子協(xié)議。用于在IP主機(jī)、路由器之間傳遞控制消息??刂葡⑹侵妇W(wǎng)絡(luò)通不通、主機(jī)是否可達(dá)、路由是否可用等網(wǎng)絡(luò)本身的消息。這些控制消息盡管并不傳輸用戶數(shù)據(jù)??墒菍τ谟脩魯?shù)據(jù)的傳遞起著關(guān)鍵的數(shù)據(jù)。
(2)ICMP報文作為IP層數(shù)據(jù)報的數(shù)據(jù),加上數(shù)據(jù)報的首部,組成數(shù)據(jù)報發(fā)送出去。
(3)ICMP報文的種類有兩種,即ICMP差錯報告報文和ICMP詢問報文。

[if !supportLists](4)[endif]我們現(xiàn)在就來抓取報文,打開dos窗口,在里面輸入ping www.baidu.com

[if !supportLists](5)[endif]打開wireshark,在filter欄中輸入 ip.addr ==172.21.53.45(自己的IP地址) and icmp

[if !supportLists](6)[endif]能夠看到windows下ping默認(rèn)運(yùn)行4次ping程序,wireshark抓到8個ICMP查詢報文,向?qū)Ψ街鳈C(jī)詢問(request)四次同時接收到四次應(yīng)答(reply),這樣加起來一共就有八個.
[if !supportLists](7)[endif]具體看一次請求和應(yīng)答過程首先先看一個包的格式,由下圖可知,報文由IP首部和ICMP報文組成,先看下IP包的首部和大

[if !supportLists](8)[endif]下圖紅色橫線部分為IP首部,共20字節(jié)

[if !supportLists](9)[endif]下圖箭頭所指向的為ICMP報文,共40字節(jié)

[if !supportLists](10)[endif]ICMP報文的具體格式

[if !supportLists](11)[endif]由此可以看到剛才的截圖
Type:8
Code:0
Checksum:0x4cbf
通過查詢ICMP報文類型可知,Type為8的包為 回射請求(Ping請求)
使用相同的方法,查看Echo (ping) reply包,得到type類型為0
通過查詢ICMP報文類型可知,Type為0的包為 回射應(yīng)答(Ping應(yīng)答)