wireShark能夠說是迄今爲止最爲強大的抓包工具。
掌握好它對學習網絡協議有巨大的幫助。git
下面是本人學習整理有關wireShare的基本用法:github
首先打開wireShark,點擊菜單欄上的捕獲(catpure)->選項(options),打開捕獲接口窗口 express
捕獲接口窗口以下圖所示:
須要關注4個部分:
一、接口:展現本機上的網絡接口。好比Wi-Fi接口、Loopback接口就是本機的環回地址:若是是訪問127.0.0.1或者localhost,應該選擇該接口進行抓包。
二、輸入與選項:下文有詳細介紹
三、流量:展現當前的網卡接口中所通過的流量。
四、捕獲過濾器:輸入只想抓取的報文的格式瀏覽器
輸入(Output)
一、在抓包的時候,要麼把報文存儲到臨時文件,要麼存儲到永久文件中。若是是永久文件,那麼能夠在文件(File)打開一個永久文件,輸入格式(Output format)也是能夠選擇的。
二、若是是臨時文件,能夠點擊自動建立文件(Create a new file automatically)。好比說,通過多少字節、通過多少秒就換一個新的文件等。
三、臨時文件也能夠用一個環形緩衝器(Use a ring buffer with)。好比說選擇2個文件,就會循環使用這兩個文件。當這兩個文件都寫好後,就從新使用第一個文件開始記錄。bash
選項(Options):
主要關注兩部分:
一、一些顯示的選項。好比是否實時的更新分組列表等。
二、自動中止捕獲。好比說通過多少字節、多少秒就中止捕獲。網絡
點擊開始(start)就能夠抓取報文了。less
抓取到報文後,來看一下wireShark面板功能:
一、工具欄:經過4條豎線分爲5類。
二、顯示過濾器:展現只想展現的報文。
三、數據包列表:這其中有不少信息,好比有多少條報文,報文的獲取時間,ip地址等。當點擊其中一個數據包時就能在細節框中展現的細節。
其中報文的時間默認是相對時間:從開始捕獲爲0s計算。
能夠在視圖(view)->時間顯示格式(Time Display Format)中轉換。
若是想對某一個報文爲時間零點來設置相對時間,能夠對着基準報文點擊右鍵選擇設置時間參考(Set/Unset Time Reference)
數據包列表中的標記符號
四、數據包細節:有一個分層的概念。tcp
點擊對應的層會有對應的細節。
五、數據包字節流:能夠看到左邊的字節流對應着右邊解析過的信息。工具
wireShark提供了一個便捷方式使得能夠從如此龐大的數據報文中找到本身感興趣的報文會話:追蹤流
好比選擇感興趣的報文,點擊右鍵選擇追蹤流(Follow)->TCP流
就能篩選出感興趣的會話, 實際上這個操做與在顯示過濾器中輸入tcp.stream eq 12是同樣的。
oop
捕獲過濾器又稱BPF過濾器。
因此只需搞清楚原語就能知道過濾器的用法。
原語(primitives):由名稱或數字,以及描述它的多個限定詞組成。
* 限定詞(qualifiers)
* Types:設置數字或者名稱所指示類型,例如host www.baidu.com
* host、post
* net,設定子網, net 192.168.0.0 mask 255.255.255.0等價於net 192.168.0.0/24
* portrange,設置端口範圍,例如portrange 6000-8000
* Dir:設置網絡出入方向,例如dst port 80
* src、dst、src or dst、src and dst(src:源端口,dst:目標端口)
* Proto:指定協議類型,例如upd
* ether、fddi、tr、wlan、ip、ip六、arp、rarp、decnet、tcp、udp、icmp、igmp、icmp、igrp、pim、ah、esp、vrrp
* 其餘
* gateway:指明網關IP地址,等價於ether host 'ehost' and not host 'host'
* broadcast:廣播報文,例如ether broadcast或者ip broadcast
* multicast:多播報文,例如ip multicast或者ip6 multicast
* less、greater:小於或者大於
* 原語運算符
* 與:&&或者and
* 或:||或者or
* 非:!或者not
舉例:src or dst portrange 6000-8000 && tcp or ip6
表示的意思就是源端口或者目的端口範圍6000到8000,而且是一個tcp協議或者ipv6
複製代碼
捕獲過濾器格式能夠應用到不少軟件,而顯示過濾器只能應用於wireShark。
顯示過濾器的功能一樣也是很是強大的,這就意味着學習成本不低啊。
首先得找到顯示過濾器支持哪些屬性?
通常來講任何報文細節面板中解析出的字段名,均可以做爲過濾屬性。
好比說這個Source Post
可是做爲過濾屬性的名稱可不是這樣。這個Source Post對應的是tcp.srcpost。
打開視圖(view)->內部(internals)->支持的協議(Supported Protocols)
找到名稱所對應的過濾器屬性
英文 | 符號 | 描述及示例 |
---|---|---|
eq | == | 等於.ip.src == 10.0.0.5 |
ne | != | 不等於.ip.src!=10.0.0.5 |
gt | > | 大於.frame.len > 10 |
lt | < | 小於.frame.len < 128 |
ge | >= | 大於等於.frame.len ge 0x100 |
le | <= | 小於等於.frame.len le 0x20 |
contains | 包含.sip.To contains 'a1763' | |
matches | ~ | 正則匹配.host matches 'acme.(org)' |
bitwise_and | & | 位與操做.tcp.flags & 0x02 |
英文 | 符號 | 意義與示例 |
---|---|---|
and | && | AND邏輯與.ip.src == 10.0.0.5 and tcp.flags.fin |
or | ||
xor | ^^ | XOR邏輯異或.tr.dst[0:3] == 0.6.29 xor tr.src[0:3] == 0.6.29 |
nor | ! | NOT邏輯非 not llc |
[...] | Slice切片操做符 | |
in | 集合操做符 |
一、大括號{}集合操做符
二、中括號[]Slice切片操做符
這麼多知識難以記住怎麼辦,別擔憂。wireShark提供了一個顯示過濾器的可視化表達式框
打開分析(Analyze)->顯示過濾器表達式(Display Filter Expression)
具體操做以下
最後分享一下wireshark解密TLS消息的方法。
原理:經過Chrome瀏覽器DEBUG日誌中的握手信息生成密鑰。
步驟:
在mac下操做方法:
/Users/username/sslkeylogs/output.log
export SSLKEYLOGFILE=/Users/username/sslkeylogs/output.log
以上僅是本人一些拙見,歡迎你們一塊兒補充討論。
更多文章請移步樓主github,若是喜歡請點一下star,對做者也是一種鼓勵