wireShark的基本用法

前言

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面板

抓取到報文後,來看一下wireShark面板功能:
一、工具欄:經過4條豎線分爲5類。

二、顯示過濾器:展現只想展現的報文。
三、數據包列表:這其中有不少信息,好比有多少條報文,報文的獲取時間,ip地址等。當點擊其中一個數據包時就能在細節框中展現的細節。
其中報文的時間默認是相對時間:從開始捕獲爲0s計算。
能夠在視圖(view)->時間顯示格式(Time Display Format)中轉換。
若是想對某一個報文爲時間零點來設置相對時間,能夠對着基準報文點擊右鍵選擇設置時間參考(Set/Unset Time Reference)
數據包列表中的標記符號
四、數據包細節:有一個分層的概念。tcp

  • Frame是wireShark本身的分層
  • Ethernet表示以太網
  • Internet Protocol表示網絡層
  • Transmission Control Protocol表示傳輸層。

點擊對應的層會有對應的細節。
五、數據包字節流:能夠看到左邊的字節流對應着右邊解析過的信息。工具

追蹤流

wireShark提供了一個便捷方式使得能夠從如此龐大的數據報文中找到本身感興趣的報文會話:追蹤流
好比選擇感興趣的報文,點擊右鍵選擇追蹤流(Follow)->TCP流
就能篩選出感興趣的會話, 實際上這個操做與在顯示過濾器中輸入tcp.stream eq 12是同樣的。
oop

捕獲過濾器

捕獲過濾器又稱BPF過濾器。

  • Berkeley Packet Filter,在設備驅動級別提供抓包過濾接口,多數抓包工具都支持此語法
  • expression表達式:由多個原語組成。

因此只需搞清楚原語就能知道過濾器的用法。

原語(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

過濾屬性類型

  • Unsigned integer:無符號整型,例如ip.len le 1500
  • Signed integer:有符號整型
  • Boolean:布爾值,例如tcp.flags.syn
  • Ethernet address:以:、-或者.分隔的6字節地址,例如eth.dst == ff:ff:ff:ff:ff
  • IPv4 address:例如ip.addr == 192.168.0.1
  • IPv6 address: 例如ipv6.addr == ::1
  • Test string:例如http.request.uri == 'www.wireshark.org/'

多個表達式間的組合

英文 符號 意義與示例
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 集合操做符

其餘經常使用的操做符

一、大括號{}集合操做符

  • 例如tcp.port in {443 4430..4434},等價於tcp.port == 443 || (tcp >= 4430 && tcp.port <= 4434)

二、中括號[]Slice切片操做符

  • [n:m]表示n是起始偏移量,m是切片長度,例如eth.src[0:3] == 00:00:83
  • [n-m]表示n是起始偏移量,m是截止偏移量,例如eth.src[1-2] == 00:83
  • [:m]表示從開始到m截止偏移量,例如eth.src[:4] == 00:00:83:00
  • [m:]表示m是起始偏移量,到字段末尾,例如eth.src[4:] == 20:20
  • [m]表示取偏移量m處的字節,例如eth.src[2] == 83
  • [,]使用逗號分隔時,容許以上方式同時出現

這麼多知識難以記住怎麼辦,別擔憂。wireShark提供了一個顯示過濾器的可視化表達式框
打開分析(Analyze)->顯示過濾器表達式(Display Filter Expression)

具體操做以下

解密tls消息

最後分享一下wireshark解密TLS消息的方法。

原理:經過Chrome瀏覽器DEBUG日誌中的握手信息生成密鑰。

步驟:

  • 配置Chrome輸出DEBUG日誌
  • 在wireshark中配置解析DEBUG日誌

在mac下操做方法:

  • 首先建立output文件用於接收DEBUG日誌,好比/Users/username/sslkeylogs/output.log
  • 而後配置環境變量SSLKEYLOGFILE:export SSLKEYLOGFILE=/Users/username/sslkeylogs/output.log
  • 配置wireshark,在首選項中選擇protocol->ssl,選擇output文件

結尾

以上僅是本人一些拙見,歡迎你們一塊兒補充討論。

更多文章請移步樓主github,若是喜歡請點一下star,對做者也是一種鼓勵

相關文章
相關標籤/搜索