最近在學習計算機網絡知識,學習過程當中使用抓包工具Wireshark
抓取網絡數據包,來輔助理解網絡協議。php
Wireshark
是一個網絡封包分析軟件。網絡封包分析軟件的功能是擷取網絡封包,並儘量顯示出最爲詳細的網絡封包資料。Wireshark
使用WinPCAP
做爲接口,直接與網卡進行數據報文交換。java
下載地址:www.wireshark.org/程序員
支持系統:Windows、macOS正則表達式
主要功能區:express
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.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
)具備最高的優先級。或(or
)和與(and
)具備相同的優先級,運算時從左至右進行。
例如
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
中可已經過表達式工具來動態生成規則。
點擊「表達式」
彈出「顯示過濾器表達式」窗口
上圖圈住的五個模塊對應着五個步驟:
第一步:搜索網絡協議
第二步:選擇協議(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…