【網(wǎng)絡(luò)學(xué)習(xí)筆記】使用Wireshark抓取HTTP報(bào)文

前言

最近在學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)知識(shí),學(xué)習(xí)過(guò)程中使用抓包工具Wireshark抓取網(wǎng)絡(luò)數(shù)據(jù)包,來(lái)輔助理解網(wǎng)絡(luò)協(xié)議。

Wireshark是一個(gè)網(wǎng)絡(luò)封包分析軟件。網(wǎng)絡(luò)封包分析軟件的功能是擷取網(wǎng)絡(luò)封包,并盡可能顯示出最為詳細(xì)的網(wǎng)絡(luò)封包資料。Wireshark使用WinPCAP作為接口,直接與網(wǎng)卡進(jìn)行數(shù)據(jù)報(bào)文交換。

目錄

文章目錄

基本使用

下載地址https://www.wireshark.org/

支持系統(tǒng):Windows、macOS

基本使用
基本使用
主要功能區(qū)

主要功能區(qū):

  1. 顯示過(guò)濾器
  2. 抓獲的封包列表
  3. 封包詳細(xì)信息
  4. 封包16進(jìn)制數(shù)據(jù)

抓取HTTP報(bào)文

抓取http報(bào)文-目錄

1.開(kāi)啟捕捉任務(wù)

2.瀏覽器訪(fǎng)問(wèn)http://www.lizhengyang.cn/

3.停止捕捉任務(wù)

4.設(shè)置顯示過(guò)濾條件

開(kāi)啟捕捉任務(wù)后,封包列表可能會(huì)出現(xiàn)很多無(wú)用的數(shù)據(jù)包,設(shè)置顯示過(guò)濾器過(guò)濾掉冗余數(shù)據(jù)。

如下圖,在顯示過(guò)濾器中輸入:http and ip.addr == 39.107.127.222 (IP地址替換為目標(biāo)網(wǎng)站的IP)

按回車(chē)鍵,只剩下兩個(gè)數(shù)據(jù)包:請(qǐng)求包、響應(yīng)包。

設(shè)置過(guò)濾條件

5.查看HTTP報(bào)文

在任意數(shù)據(jù)包上點(diǎn)擊右鍵:追蹤流-->HTTP流

彈出窗口就是完整的HTTP報(bào)文,紅色字體為HTTP請(qǐng)求報(bào)文,藍(lán)色字體為HTTP響應(yīng)報(bào)文

查看HTTP報(bào)文

過(guò)濾器

如果不設(shè)置過(guò)濾器,會(huì)抓取很多雜亂冗余的數(shù)據(jù),以至于很難找到自己需要的部分。使用過(guò)濾器可以幫助我們精準(zhǔn)找到需要的信息。

過(guò)濾器分兩種:

  • 捕捉過(guò)濾器。只捕捉符合過(guò)濾規(guī)則的封包,其它數(shù)據(jù)不會(huì)存在封包列表中。在捕捉前設(shè)置。
  • 顯示過(guò)濾器。用來(lái)過(guò)濾抓取后的結(jié)果,可以隨意更改過(guò)濾規(guī)則。

注意:兩種過(guò)濾器的規(guī)則語(yǔ)法是不一樣的,不要混淆。

捕捉過(guò)濾器

捕捉過(guò)濾器的語(yǔ)法與其它使用Lipcap(Linux)或者Winpcap(Windows)庫(kù)開(kāi)發(fā)的軟件一樣,比如著名的TCPdump。捕捉過(guò)濾器必須在開(kāi)始捕捉前設(shè)置完畢,這一點(diǎn)跟顯示過(guò)濾器是不同的。

設(shè)置捕捉過(guò)濾器的步驟是:
- 工具欄 -> 捕捉 -> 選項(xiàng)
- WLAN -> 捕捉過(guò)濾器中輸入規(guī)則
- 點(diǎn)擊開(kāi)始(Start)進(jìn)行捕捉

設(shè)置捕捉過(guò)濾器

過(guò)濾公式

語(yǔ)法: Protocol Direction Host(s) Value Logical Operations Other expression
例子: tcp dst 10.1.1.1 80 and tcp dst 10.2.2.2 3128

Protocol(協(xié)議):

可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp

如果沒(méi)有特別指明是什么協(xié)議,則默認(rèn)使用所有支持的協(xié)議。

Direction(方向):

可能的值: src, dst, src and dst, src or dst

如果沒(méi)有特別指明來(lái)源或目的地,則默認(rèn)使用 "src or dst" 作為關(guān)鍵字。

例如,host 10.2.2.2src or dst host 10.2.2.2是一樣的

Host(s)

可能的值: net, port, host, portrange

如果沒(méi)有指定此值,則默認(rèn)使用"host"關(guān)鍵字。

例如,src 10.1.1.1src host 10.1.1.1`相同。

Logical Operations(邏輯運(yùn)算):

可能的值:not, and, or

否(not)具有最高的優(yōu)先級(jí)。或(or)和與(and)具有相同的優(yōu)先級(jí),運(yùn)算時(shí)從左至右進(jìn)行。

例如

  • not tcp port 3128 and tcp port 23(not tcp port 3128) and tcp port23相同。
  • not tcp port 3128 and tcp port 23not (tcp port 3128 and tcp port23)不同。

案例

//顯示目的TCP端口為3128的封包。
tcp dst port 3128

//顯示來(lái)源IP地址為10.1.1.1的封包。
ip src host 10.1.1.1

//顯示目的或來(lái)源IP地址為10.1.2.3的封包。
host 10.1.2.3

//顯示來(lái)源為UDP或TCP,并且端口號(hào)在2000至2500范圍內(nèi)的封包。
src portrange 2000-2500

//顯示除了icmp以外的所有封包。(icmp通常被ping工具使用)
not imcp

//顯示來(lái)源IP地址為10.7.2.12,但目的地不是10.200.0.0/16的封包。
src host 10.7.2.12 and not dst net 10.200.0.0/16

//顯示來(lái)源IP為10.4.1.12或者來(lái)源網(wǎng)絡(luò)為10.6.0.0/16,目的地TCP端口號(hào)在200至10000之間,并且目的位于網(wǎng)絡(luò)10.0.0.0/8內(nèi)的所有封包。
(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8

//顯示目的TCP端口為3128的封包。
tcp dst port 3128`

//顯示來(lái)源IP地址為10.1.1.1的封包。
ip src host 10.1.1.1

//顯示目的或來(lái)源IP地址為10.1.2.3的封包。
host 10.1.2.3

//顯示來(lái)源為UDP或TCP,并且端口號(hào)在2000至2500范圍內(nèi)的封包。
src portrange 2000-2500

//顯示除了icmp以外的所有封包。(icmp通常被ping工具使用)
not imcp

//顯示來(lái)源IP地址為10.7.2.12,但目的地不是10.200.0.0/16的封包。
src host 10.7.2.12 and not dst net 10.200.0.0/16

顯示過(guò)濾器

剛才抓取HTTP報(bào)文使用的就是顯示過(guò)濾器。

過(guò)濾公式

語(yǔ)法: Protocol . String 1 . String 2 Comparisonoperator Value LogicalOperations Otherexpression
例子: http request uri == "/index" xor ip.dst != 10.4.5.6

看到這里有是不是有點(diǎn)蒙,每個(gè)符號(hào)都認(rèn)識(shí),但為啥要這樣組合呢?

不要怕,這個(gè)公式不需要記住,熟悉一下公式的結(jié)構(gòu)即可,因?yàn)?code>Wireshark中可已通過(guò)表達(dá)式工具來(lái)動(dòng)態(tài)生成規(guī)則。

動(dòng)態(tài)生成過(guò)濾規(guī)則

點(diǎn)擊“表達(dá)式”

表達(dá)式

彈出“顯示過(guò)濾器表達(dá)式”窗口

濾器表達(dá)式窗口

上圖圈住的五個(gè)模塊對(duì)應(yīng)著五個(gè)步驟:

第一步:搜索網(wǎng)絡(luò)協(xié)議

第二步:選擇協(xié)議(Protocol)

可以使用tcp、ip、udp等位于OSI模型第2至7層的協(xié)議。點(diǎn)擊協(xié)議列表,可以選擇需要參與過(guò)濾的協(xié)議。

舉例:http.request.uri (http請(qǐng)求中的uri)

其中http為協(xié)議,request.uri是協(xié)議的子類(lèi),通過(guò) .連接。Wireshark的官網(wǎng)提供了對(duì)各種 協(xié)議以及它們子類(lèi)的說(shuō)明。

第三步:選擇比較運(yùn)算符(Comparison operators)

英文寫(xiě)法: C語(yǔ)言寫(xiě)法: 含義:
eq == 等于
ne != 不等于
gt > 大于
lt < 小于
ge >= 大于等于
le <= 小于等于
contains contains 包含
matches matches 正則表達(dá)式匹配
in in 在指定集中

第四步:選擇比較的值

第五步:校驗(yàn)規(guī)則是否合法

以上的每一步操作都會(huì)在下方輸入框自動(dòng)生成過(guò)濾規(guī)則,合法的規(guī)則顯示綠色背景,不合法的規(guī)則顯示紅色背景。

校驗(yàn)完成點(diǎn)擊ok,顯示過(guò)濾器規(guī)則設(shè)置完成。

多個(gè)過(guò)濾條件

若需要通過(guò)過(guò)個(gè)條件篩選數(shù)據(jù),比如:只顯示80端口和8080端口的封包。就要用到邏輯運(yùn)算符(Logical expressions),把多個(gè)條件連接。

英文寫(xiě)法: C語(yǔ)言寫(xiě)法: 含義:
and && 邏輯與
or || 邏輯或
xor ^^ 邏輯異或
not ! 邏輯非

被程序員們熟知的邏輯異或是一種排除性的或。當(dāng)其被用在過(guò)濾器的兩個(gè)條件之間時(shí),只有當(dāng)且僅當(dāng)其中的一個(gè)條件滿(mǎn)足時(shí),這樣的結(jié)果才會(huì)被顯示在屏幕上。
舉個(gè)例子:

//只有當(dāng)目的TCP端口為80或者來(lái)源于端口1025(但又不能同時(shí)滿(mǎn)足這兩點(diǎn))時(shí),這樣的封包才會(huì)被顯示。
tcp.dstport 80 xor tcp.dstport 1025

案例

//顯示HTTP或UDP議封包
 http || udp

//顯示來(lái)源或目的IP地址為10.1.1.1的封包
ip.addr == 10.1.1.1

//顯示來(lái)源不為10.1.2.3或者目的不為10.4.5.6的封包。換句話(huà)說(shuō),顯示的封包將會(huì)為:
//來(lái)源IP:除了10.1.2.3以外任意;目的IP:任意
//以及
//來(lái)源IP:任意;目的IP:除了10.4.5.6以外任意
`ip.src != 10.1.2.3 or ip.dst != 10.4.5.6` 

//顯示來(lái)源不為10.1.2.3并且目的IP不為10.4.5.6的封包。換句話(huà)說(shuō),顯示的封包將會(huì)為:來(lái)源IP:除了10.1.2.3以外任意;同時(shí)須滿(mǎn)足,目的IP:除了10.4.5.6以外任意 
ip.src != 10.1.2.3 and ip.dst != 10.4.5.6

//顯示來(lái)源或目的TCP端口號(hào)為25的封包
tcp.port == 25

//顯示目的TCP端口號(hào)為25的封包 
tcp.dstport == 25

//顯示包含TCP標(biāo)志的封包
tcp.flags    

//顯示包含TCP SYN標(biāo)志的封包
tcp.flags.syn == 0x02`

//顯示HTPP域名中包含'baidu'的封包
http.host contains "baidu"

結(jié)束語(yǔ)

至此,Wireshark的基本功能和使用方法已經(jīng)介紹完了。如果有錯(cuò)誤的地方懇請(qǐng)留言指出。

參考資料

https://wiki.wireshark.org/DisplayFilters

https://wiki.wireshark.org/CaptureFilters

http://openmaniak.com/cn/wireshark.php

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容