前言
最近在學習計算機網絡知識,學習過程中使用抓包工具Wireshark
抓取網絡數(shù)據包樊销,來輔助理解網絡協(xié)議相寇。
Wireshark
是一個網絡封包分析軟件。網絡封包分析軟件的功能是擷取網絡封包款咖,并盡可能顯示出最為詳細的網絡封包資料何暮。Wireshark
使用WinPCAP
作為接口,直接與網卡進行數(shù)據報文交換之剧。
目錄
基本使用
下載地址:https://www.wireshark.org/
支持系統(tǒng):Windows郭卫、macOS
主要功能區(qū):
- 顯示過濾器
- 抓獲的封包列表
- 封包詳細信息
- 封包16進制數(shù)據
抓取HTTP
報文
1.開啟捕捉任務
2.瀏覽器訪問http://www.lizhengyang.cn/
3.停止捕捉任務
4.設置顯示過濾條件
開啟捕捉任務后,封包列表可能會出現(xiàn)很多無用的數(shù)據包背稼,設置顯示過濾器過濾掉冗余數(shù)據贰军。
如下圖,在顯示過濾器中輸入:http and ip.addr == 39.107.127.222
(IP地址替換為目標網站的IP)
按回車鍵蟹肘,只剩下兩個數(shù)據包:請求包词疼、響應包。
5.查看HTTP報文
在任意數(shù)據包上點擊右鍵:追蹤流-->HTTP流
彈出窗口就是完整的HTTP報文
帘腹,紅色字體為HTTP請求報文
贰盗,藍色字體為HTTP響應報文
過濾器
如果不設置過濾器,會抓取很多雜亂冗余的數(shù)據阳欲,以至于很難找到自己需要的部分舵盈。使用過濾器可以幫助我們精準找到需要的信息。
過濾器分兩種:
- 捕捉過濾器球化。只捕捉符合過濾規(guī)則的封包秽晚,其它數(shù)據不會存在封包列表中。在捕捉前設置筒愚。
- 顯示過濾器赴蝇。用來過濾抓取后的結果,可以隨意更改過濾規(guī)則巢掺。
注意:兩種過濾器的規(guī)則語法是不一樣的句伶,不要混淆劲蜻。
捕捉過濾器
捕捉過濾器的語法與其它使用Lipcap(Linux)或者Winpcap(Windows)庫開發(fā)的軟件一樣,比如著名的TCPdump考余。捕捉過濾器必須在開始捕捉前設置完畢先嬉,這一點跟顯示過濾器是不同的。
設置捕捉過濾器的步驟是:
- 工具欄 -> 捕捉 -> 選項
- WLAN -> 捕捉過濾器中輸入規(guī)則
- 點擊開始(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(協(xié)議):
可能的值: ether
, fddi
, ip
, arp
, rarp
, decnet
, lat
, sca
, moprc
, mopdl
, tcp
如果沒有特別指明是什么協(xié)議秃殉,則默認使用所有支持的協(xié)議坝初。
Direction(方向):
可能的值: src
, dst
, src and dst
, src or dst
如果沒有特別指明來源或目的地,則默認使用 "src or dst" 作為關鍵字钾军。
例如鳄袍,host 10.2.2.2
與src or dst host 10.2.2.2
是一樣的
Host(s)
可能的值: net
, port
, host
, portrange
如果沒有指定此值,則默認使用"host"關鍵字吏恭。
例如拗小,src 10.1.1.1與
src host 10.1.1.1`相同。
Logical Operations(邏輯運算):
可能的值:not
, and
, or
否(not
)具有最高的優(yōu)先級樱哼“Ь牛或(or
)和與(and
)具有相同的優(yōu)先級,運算時從左至右進行搅幅。
例如
-
not tcp port 3128 and tcp port 23
與(not tcp port 3128) and tcp port23
相同阅束。 -
not tcp port 3128 and tcp port 23
與not (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
中可已通過表達式工具來動態(tài)生成規(guī)則。
動態(tài)生成過濾規(guī)則
點擊“表達式”
彈出“顯示過濾器表達式”窗口
上圖圈住的五個模塊對應著五個步驟:
第一步:搜索網絡協(xié)議
第二步:選擇協(xié)議(Protocol)
可以使用tcp报咳、ip侠讯、udp等位于OSI模型第2至7層的協(xié)議。點擊協(xié)議列表暑刃,可以選擇需要參與過濾的協(xié)議厢漩。
舉例:http.request.uri
(http請求中的uri)
其中http
為協(xié)議,request.uri
是協(xié)議的子類,通過 .
連接岩臣。Wireshark
的官網提供了對各種 協(xié)議以及它們子類的說明溜嗜。
第三步:選擇比較運算符(Comparison operators)
英文寫法: | C語言寫法: | 含義: |
---|---|---|
eq | == | 等于 |
ne | != | 不等于 |
gt | > | 大于 |
lt | < | 小于 |
ge | >= | 大于等于 |
le | <= | 小于等于 |
contains | contains | 包含 |
matches | matches | 正則表達式匹配 |
in | in | 在指定集中 |
第四步:選擇比較的值
第五步:校驗規(guī)則是否合法
以上的每一步操作都會在下方輸入框自動生成過濾規(guī)則,合法的規(guī)則顯示綠色背景架谎,不合法的規(guī)則顯示紅色背景炸宵。
校驗完成點擊ok
,顯示過濾器規(guī)則設置完成谷扣。
多個過濾條件
若需要通過過個條件篩選數(shù)據土全,比如:只顯示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
的基本功能和使用方法已經介紹完了弧哎。如果有錯誤的地方懇請留言指出。
參考資料
https://wiki.wireshark.org/DisplayFilters