【網絡學習筆記】使用Wireshark抓取HTTP報文.md

前言

最近在學習計算機網絡知識,學習過程當中使用抓包工具Wireshark抓取網絡數據包,來輔助理解網絡協議。php

Wireshark是一個網絡封包分析軟件。網絡封包分析軟件的功能是擷取網絡封包,並儘量顯示出最爲詳細的網絡封包資料。Wireshark使用WinPCAP做爲接口,直接與網卡進行數據報文交換。java

目錄

目錄

基本使用

下載地址www.wireshark.org/程序員

支持系統:Windows、macOS正則表達式

主要功能區

主要功能區:express

  1. 顯示過濾器
  2. 抓獲的封包列表
  3. 封包詳細信息
  4. 封包16進制數據

抓取HTTP報文

抓取http報文-目錄

1.開啓捕捉任務瀏覽器

2.瀏覽器訪問http://www.lizhengyang.cn/網絡

3.中止捕捉任務tcp

4.設置顯示過濾條件工具

開啓捕捉任務後,封包列表可能會出現不少無用的數據包,設置顯示過濾器過濾掉冗餘數據。學習

以下圖,在顯示過濾器中輸入:http and ip.addr == 39.107.127.222 (IP地址替換爲目標網站的IP)

按回車鍵,只剩下兩個數據包:請求包、響應包。

主要功能區

5.查看HTTP報文

在任意數據包上點擊右鍵:追蹤流-->HTTP流

彈出窗口就是完整的HTTP報文,紅色字體爲HTTP請求報文,藍色字體爲HTTP響應報文

主要功能區

過濾器

若是不設置過濾器,會抓取不少雜亂冗餘的數據,以致於很難找到本身須要的部分。使用過濾器能夠幫助咱們精準找到須要的信息。

過濾器分兩種:

  • 捕捉過濾器。只捕捉符合過濾規則的封包,其它數據不會存在封包列表中。在捕捉前設置。
  • 顯示過濾器。用來過濾抓取後的結果,能夠隨意更改過濾規則。

注意:兩種過濾器的規則語法是不同的,不要混淆。

捕捉過濾器

捕捉過濾器的語法與其它使用Lipcap(Linux)或者Winpcap(Windows)庫開發的軟件同樣,好比著名的TCPdump。捕捉過濾器必須在開始捕捉前設置完畢,這一點跟顯示過濾器是不一樣的。

設置捕捉過濾器的步驟是: - 工具欄 -> 捕捉 -> 選項 - WLAN -> 捕捉過濾器中輸入規則 - 點擊開始(Start)進行捕捉

主要功能區

過濾公式

語法: 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(協議):

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

若是沒有特別指明是什麼協議,則默認使用全部支持的協議。

Direction(方向):

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

若是沒有特別指明來源或目的地,則默認使用 "src or dst" 做爲關鍵字。

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

Host(s)

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

若是沒有指定此值,則默認使用"host"關鍵字。

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

Logical Operations(邏輯運算):

可能的值:not, and, or

否(not)具備最高的優先級。或(or)和與(and)具備相同的優先級,運算時從左至右進行。

例如

  • 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

//顯示來源IP地址爲10.1.1.1的封包。
ip src host 10.1.1.1

//顯示目的或來源IP地址爲10.1.2.3的封包。
host 10.1.2.3

//顯示來源爲UDP或TCP,而且端口號在2000至2500範圍內的封包。
src portrange 2000-2500

//顯示除了icmp之外的全部封包。(icmp一般被ping工具使用)
not imcp

//顯示來源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

//顯示來源IP爲10.4.1.12或者來源網絡爲10.6.0.0/16,目的地TCP端口號在200至10000之間,而且目的位於網絡10.0.0.0/8內的全部封包。
(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`

//顯示來源IP地址爲10.1.1.1的封包。
ip src host 10.1.1.1

//顯示目的或來源IP地址爲10.1.2.3的封包。
host 10.1.2.3

//顯示來源爲UDP或TCP,而且端口號在2000至2500範圍內的封包。
src portrange 2000-2500

//顯示除了icmp之外的全部封包。(icmp一般被ping工具使用)
not imcp

//顯示來源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

複製代碼

顯示過濾器

剛纔抓取HTTP報文使用的就是顯示過濾器。

過濾公式

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

看到這裏有是否是有點蒙,每一個符號都認識,但爲啥要這樣組合呢?

不要怕,這個公式不須要記住,熟悉一下公式的結構便可,由於Wireshark中可已經過表達式工具來動態生成規則。

動態生成過濾規則

點擊「表達式」

主要功能區

彈出「顯示過濾器表達式」窗口

主要功能區

上圖圈住的五個模塊對應着五個步驟:

第一步:搜索網絡協議

第二步:選擇協議(Protocol)

可使用tcp、ip、udp等位於OSI模型第2至7層的協議。點擊協議列表,能夠選擇須要參與過濾的協議。

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

其中http爲協議,request.uri是協議的子類,經過 .鏈接。Wireshark的官網提供了對各類 協議以及它們子類的說明

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

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

第四步:選擇比較的值

第五步:校驗規則是否合法

以上的每一步操做都會在下方輸入框自動生成過濾規則,合法的規則顯示綠色背景,不合法的規則顯示紅色背景。

校驗完成點擊ok,顯示過濾器規則設置完成。

多個過濾條件

若須要經過過個條件篩選數據,好比:只顯示80端口和8080端口的封包。就要用到邏輯運算符(Logical expressions),把多個條件鏈接。

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

被程序員們熟知的邏輯異或是一種排除性的或。當其被用在過濾器的兩個條件之間時,只有當且僅當其中的一個條件知足時,這樣的結果纔會被顯示在屏幕上。 舉個例子:

//只有當目的TCP端口爲80或者來源於端口1025(但又不能同時知足這兩點)時,這樣的封包纔會被顯示。
tcp.dstport 80 xor tcp.dstport 1025
複製代碼

案例

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

//顯示來源或目的IP地址爲10.1.1.1的封包
ip.addr == 10.1.1.1

//顯示來源不爲10.1.2.3或者目的不爲10.4.5.6的封包。換句話說,顯示的封包將會爲:
//來源IP:除了10.1.2.3之外任意;目的IP:任意
//以及
//來源IP:任意;目的IP:除了10.4.5.6之外任意
`ip.src != 10.1.2.3 or ip.dst != 10.4.5.6` 

//顯示來源不爲10.1.2.3而且目的IP不爲10.4.5.6的封包。換句話說,顯示的封包將會爲:來源IP:除了10.1.2.3之外任意;同時須知足,目的IP:除了10.4.5.6之外任意 
ip.src != 10.1.2.3 and ip.dst != 10.4.5.6

//顯示來源或目的TCP端口號爲25的封包
tcp.port == 25

//顯示目的TCP端口號爲25的封包 
tcp.dstport == 25

//顯示包含TCP標誌的封包
tcp.flags    

//顯示包含TCP SYN標誌的封包
tcp.flags.syn == 0x02`

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

複製代碼

結束語

至此,Wireshark的基本功能和使用方法已經介紹完了。若是有錯誤的地方懇請留言指出。

參考資料

wiki.wireshark.org/DisplayFilt…

wiki.wireshark.org/CaptureFilt…

openmaniak.com/cn/wireshar…

相關文章
相關標籤/搜索