序言
之前學計網還有前幾天備考華為 ICT 網絡賽道時都有了解認識 Wireshark,但一直沒怎么專門去用過,也沒去系統學習過,就想趁著備考的網絡相關知識還沒忘光,先來系統學下整理點筆記~
什么是抓包?抓包就是將網絡傳輸發送與接收的數據包進行截獲、分析、重發、編輯、轉存等操作,也用來檢查網絡安全。在我們做接口測試的時候,經常需要驗證發送的消息是否正確,或者在出現問題的時候,查看手機客戶端發送給 server 端的包內容是否正確,就需要用到抓包工具。而工程師和程序常用的抓包工具有哪些呢?
Sniffmaster 是在 Windows ,mac和linux上運行的程序,專門用來捕獲 HTTP , HTTPS和tcp,udp 的;Wireshark 能獲取各類網絡協議包,但是不能解密所以 Wireshark 看不懂 HTTPS 中的內容,可以運行在 Windows、Linux 和 Mac OS 上;Linux 還有個輕量級的命令行抓包工具是 tcpdump 。本人學過一點 Linux 但沒了解 mac OS 這邊,因此本文是主要重點分析 Wireshark,然后簡單介紹 Fiddler 和 tcpdump 的使用。
學習之前最好先了解計網的網絡協議和分包 等核心知識,便于理解:
一、Wireshark
1、Wireshark 認識
(1)基本信息
Wireshark 是目前最流行、功能強大的網絡協議圖形化分析工具 ,用于捕獲和分析網絡數據包,以深入了解網絡流量,廣泛應用于網絡故障診斷、安全分析、軟件開發和學習網絡協議等場景。
- 開發者 :由 Gerald Combs 開發,現由社區和 Wireshark 基金會維護。
- 開源 :Wireshark 是免費且開源的軟件,支持多種平臺(Windows、macOS、Linux 等)。
- 官網 :https://www.wireshark.org/
- 支持的協議 :Wireshark 支持數百種網絡協議(如 HTTP、TCP、UDP、DNS、SSL/TLS 等),并不斷更新支持新協議。
(2)Wireshark 的功能
- 數據包捕獲 :捕獲通過網絡接口傳輸的數據包或實時流量,支持有線、無線、藍牙等多種類型的網絡。
- 協議解碼 :提供對網絡協議的解碼和詳細分析。
- 數據包分析 :允許查看數據包的各層內容(鏈路層、網絡層、傳輸層和應用層)并支持檢測和分析網絡異常。
- 數據過濾 :在捕獲數據時僅抓取特定條件的流量;在已捕獲的數據中篩選感興趣的內容。
- 圖形化展示 :提供網絡流量統計圖、I/O 圖、協議分布圖等,幫助用戶直觀分析流量。
- 數據導出與共享 :數據捕獲可以保存為多種格式,如 .pcap、.csv 等,可以被其他網絡分析工具讀取。
(3)Wireshark 抓包捕獲原理
Wireshark 的抓包功能依賴底層的數據鏈路層 訪問權限,使用WinPCAP/Npcap 作為接口直接與網卡進行數據報文交換**。使用的環境大致分為兩種,一種是電腦直連網絡的單機環境,另外一種就是應用比較多的即連接交換機的網絡環境。
單機情況 :Wireshark 直接抓取本機網卡的網絡流量,默認正常工作模式,適用于分析本地通信;
交換機情況 :Wireshark 通過端口鏡像、ARP 欺騙 等方式獲取局域網中的網絡流量。
- 端口鏡像:利用交換機的接口作為鏡像端口 SPAN,將局域網指定接口或 VLAN 的流量復制到鏡像端口,Wireshark 運行在連接鏡像端口的電腦上,從而可以捕獲這里的數據流量(無法抓取加密流量)。
- ARP 欺騙:使用工具(如 Ettercap 或 Arpspoof )發送偽造的 ARP 響應,欺騙局域網中的目標設備將其流量發送到攻擊者的設備,Wireshark 偽裝成中間人(MITM)捕獲流量后再將數據轉發給真正的網關。
Wireshark 的捕獲機制是監聽并復制數據包流經指定接口的數據 供分析使用。
- 監聽指定接口的數據流 :Wireshark 會監控用戶選擇的網絡接口(以太網、Wi-Fi 等)上的數據流。
- 復制數據包到本地分析 :Wireshark 不會對網絡上的實際數據包產生影響,而是將通過接口捕獲到的數據包復制到本地內存中,并將其按照時間順序記錄。捕獲到的數據包會被存儲在內存或臨時文件中,并可保存為 .pcap 文件供后續分析,若選不保存則是刪除本地復制的數據包無法恢復。
(4)Wireshark 捕獲主要模式(決定網卡能夠接收到的數據包范圍 )
正常模式 (Normal Mode):網卡只會捕獲發送給自身的特定數據包如單播、廣播和多播數據包,適合抓取與主機直接相關的流量排查本地問題 。
混雜模式 (Promiscuous Mode):網卡會捕獲經過網絡接口的所有數據包 ,可用于分析局域網內的整體通信流量 ,能查看其他主機的通信。
監視模式 (Monitor Mode):主要用于無線網絡分析 802.11 協議,能夠截獲未與網卡關聯的所有無線數據幀 (包括管理幀、控制幀和數據幀),用于調試 Wi-Fi 網絡問題并測試無線網絡的安全性。
(5)Wireshark 的特點
- 跨平臺支持 :支持 Windows、macOS、Linux 等操作系統。
- 協議支持廣泛 :Wireshark 支持從常見的 HTTP、DNS 到專有的工業協議。
- 用戶友好界面 :提供直觀的 GUI 和強大的過濾器系統。
- 可擴展性 :支持通過 Lua 編寫插件,擴展 Wireshark 的功能。
- 實時捕獲與離線分析 :既可實時捕獲流量,也可分析離線的捕獲文件。
(6)安裝下載
官網下載地址:Wireshark · Go Deep
下載安裝 Windows x64 版本
下載完成后接著一路按照軟件提示 Next 安裝即可。
2、Wireshark 界面詳解(Windows)
(1)Wireshark 界面認識
打開 Wireshark,主界面如下:
(2)接口列表詳細分析
選擇菜單欄上的“捕獲”點擊“選項”可以查看所有可用接口詳細配置信息選項:
Wireshark 顯示的捕獲接口信息主要包括以下列 :
- 接口名稱 :每個網絡接口的名稱(如“本地連接 *數字”)。
- 流量 :實時顯示當前接口上的流量活動(波動的流量曲線)。
- 鏈路層 :接口使用的鏈路層協議類型(如 Ethernet)。
- 混雜模式 :是否啟用混雜模式以捕獲接口上所有的網絡流量。
- 捕獲長度 、緩沖區 、監控模式 :Wireshark 捕獲的相關設置和當前狀態。
Wireshark 顯示的各類接口的詳細介紹 :
“本地連接 數字* ”接口通常是 Windows 系統中虛擬接口或未激活的網絡接口 ,可以通過設備管理器禁用。
“vEthernet (WSL) ”是 WSL 創建的虛擬網絡接口,用于連接 WSL 環境與主機網絡并監控 WSL 應用產生的流量,IP 地址為 172.17.128.1,這通常是 WSL 的虛擬網絡子網范圍。
“WLAN ”接口是無線網絡適配器(Wi-Fi 網卡),IP 地址 192.168.2.103,用于捕獲 Wi-Fi 網絡中的流量。
“以太網2 ”可能是本機的物理有線網卡(Ethernet),IP 地址 192.168.56.1,這通常是虛擬化軟件(如 VirtualBox、VMware)創建的虛擬網絡適配器,常用于虛擬機通信。
“vEthernet (Default Switch) ”是 Hyper-V 虛擬化環境創建的默認交換機接口,IP 地址 172.19.176.1,通常是 Hyper-V 虛擬網絡的默認子網,用于捕獲 Hyper-V 虛擬機與主機或網絡之間的通信流量。
“Adapter for loopback traffic capture ”是環回接口,IP 地址 127.0.0.1,用于捕獲本地通信流量。
“Raw IP ”表示直接捕獲 IP 層流量,而不依賴具體的鏈路層協議。
這些接口主要用于遠程捕獲或特定環境下的網絡數據分析:
“Cisco Remote Capture ”接口用于與 Cisco 設備(如路由器或交換機) 建立遠程連接,從設備中抓取網絡數據包,可以分析其流量或調試網絡配置問題。要求有管理員權限配置 Cisco 設備并啟用遠程數據捕獲功能。
“Event Tracing for Windows (ETW) Reader ”接口可以捕獲與 Windows 內核相關的網絡流量或事件信息 ,利用 Windows 系統的事件跟蹤機制提供對系統內部網絡事件的捕獲能力。
“Random Packet Generator ”是一個模擬接口,用于生成隨機的網絡數據包,不涉及實際的網絡通信 ,僅用于測試或驗證數據包解碼功能,常用于開發者或協議分析。
“SSH Remote Capture ”通過 SSH 協議 連接遠程設備,從中捕獲數據包。
“UDP Listener Remote Capture ”接口用于監聽來自遠程設備通過 UDP 協議發送的流量 。
“Wi-Fi Remote Capture ”接口用于遠程捕獲 Wi-Fi 網絡 流量,用于無線網絡性能分析或調試。
(3)雙擊“WLAN”后進入如下頁面開始抓包:
圖示以 WLAN 抓 TCP 數據包為例
左上角紅框點擊即停止抓包,最左上角“文件”選擇“保存”即可以保存抓包的數據,這是最基礎的抓包。
從上圖可知 Wireshark 操作的主界面包含 6 個部分:
- 菜單欄:用于調試、配置
- 工具欄:常用功能的快捷方式
- 過濾欄:指定過濾條件過濾數據包,如上圖過濾位置選了 tcp 篩選數據包
- 數據包列表:核心區域,每一行就是一個數據包
- 數據包詳情:數據包的詳細數據
- 數據包字節:數據包對應的十六進制字節流和 ASCII 碼
(4)菜單欄與工具欄與過濾欄
菜單欄位于主界面的頂部,提供全面的調試和配置選項 ,包括捕獲、分析、統計和導出。
- File(文件): 打開/保存捕獲文件、導出數據包或退出程序。
- Edit(編輯): 配置首選項、搜索數據包或清除屏幕。
- View(視圖): 定制界面布局,例如顯示/隱藏工具欄、過濾欄等。
- Capture(捕獲): 設置捕獲參數(選擇網絡接口、過濾規則等),并啟動/停止捕獲。
- Analyze(分析): 應用顯示過濾器、啟用協議解析器或重新組裝流。
- Statistics(統計): 查看網絡統計(如 IO 圖表、協議層統計、端點分析等)。
- Telephony(電話): 分析 VoIP 和 SIP 協議的流量(如 RTP 流、呼叫分析)。
- Help(幫助): 查看幫助文檔、協議參考以及關于 Wireshark 的信息。
工具欄位于菜單欄下方,提供一些常用功能的快捷方式 ,方便用戶快速操作。
- Start(開始捕獲): 開始實時捕獲網絡流量。
- Stop(停止捕獲): 停止當前捕獲。
- Open(打開): 加載保存的捕獲文件。
- Save(保存): 將當前捕獲會話保存為 .pcap 或其他格式。
- 捕獲接口選擇: 選擇要監控的網絡接口。
- 過濾: 應用過濾條件快速縮小分析范圍。
- 流重組: 快速查看 TCP 或 UDP 的上下文流量。
- 其他: 包括統計功能、清除顯示、顯示或隱藏面板等。
過濾欄位于工具欄下方,用于設置過濾條件進行數據包列表過濾 ,支持多種形式過濾并實時顯示過濾器是否有效(輸入框變為綠色表示有效,紅色表示無效)。
- 基礎協議 : 如 tcp、udp、icmp。
- 條件組合 : 使用邏輯運算符如 and、or、not。
- 字段過濾 : 如 ip.src == 192.168.1.1(過濾源 IP 是 192.168.1.1 的數據包)。
(5)數據包列表 Packet List Pane
按時間順序排列顯示捕獲到的數據包 ,每一行代表一個數據包,每個數據包包含編號、時間戳、源地址、目標地址、協議、長度以及數據包信息。不同協議的數據包使用了不同的顏色區分顯示,可以在菜單欄“視圖”的“著色規則”里查看。
- 編號(No.): 數據包的序號,從 1 開始。
- 時間(Time): 數據包捕獲的時間戳(相對時間或絕對時間,用戶可配置)。
- 源地址(Source): 數據包的源 IP 地址或主機名。
- 目的地址(Destination): 數據包的目的 IP 地址或主機名。
- 協議(Protocol): 數據包使用的協議(如 TCP、UDP、HTTP)。
- 長度(Length): 數據包的大小(以字節為單位)。
- 信息(Info): 數據包的簡要信息(如 HTTP 請求類型、TCP 標志等)。
(6)數據包詳情 Packet Details Pane
位于數據包列表下方,用于顯示當前選中的數據包的詳細協議層次結構解析信息 。
此過濾的是 tcp 所以最高到傳輸層
- Frame(幀): 顯示數據包的物理層基本信息(捕獲時間、長度等)。
- Ethernet(以太網): 解析數據鏈路層以太網幀頭部信息(MAC 地址、幀類型)。
- IP(網絡層): 顯示 IP 地址、TTL、標志位等。
- TCP/UDP(傳輸層): 顯示端口號、序列號等。
- 應用層協議: 如 HTTP、DNS、TLS 的具體內容。
(7)數據包字節 Dissector Pane
位于界面的最下方或側右邊,顯示當前選中數據包的原始數據字節流 ,可以檢查協議字段的實際值。
字節流點擊十六進制部分會和對應的ASCII部分的內容高亮
- 十六進制視圖: 顯示數據包的二進制內容,每個字節以十六進制表示。
- ASCII 視圖: 顯示數據包內容的 ASCII 表示(若不可見則顯示 .)。
- 實時定位: 點擊數據包詳情中的某字段,字節流中會高亮對應的內容。
3、常用基礎界面操作
(1)設置顯示列
數據包列表中有一些默認顯示的列,我們可以添加、刪除、修改顯示的列。
想要在數據包列表中顯示某一個字段,可以在數據包詳情右鍵選中這個數據字段“添加為列”即可。
按 Ctrl + Shift + I 也可以實現同樣的效果
- 隱藏字段列 :在顯示列的任意位置右鍵取消列的高亮勾選即可。
- 刪除字段列 :在指定的列名位置右鍵點擊最下方的“Remove this Column”。
(2)設置時間
默認精確到微秒,打開工具欄的“視圖”選“時間顯示格式”即可設置不同格式
(3)標記和導出數據包
對于某些比較重要的數據包,可以選中右鍵選擇最上面的“標記/取消標記”設置成高亮顯示。
按 Ctrl + M 也可以實現同樣的效果,按兩次可以取消標記
保存全部數據包:菜單欄的“文件”和工具欄的“保存捕獲文件”都可以默認保存所有已經抓取的數據包。
導出一或多個數據包:菜單欄的“文件”選擇“導出特定分組”,僅選中分組是只保存選中的數據包;僅已標記分組是在當前捕獲數據包中有標記時可用與多個選擇,范圍則也是可以多個選擇。
(4)進一步分析數據包
除了單機數據包列表在數據包詳情查看完整信息外,我們還可以右鍵列表對應的數據包選擇“追蹤流”查看該數據流的詳細內容
一組完整的請求-響應對的數據包信息
4、過濾操作詳解
Wireshark 提供了兩個過濾器:抓包過濾器和顯示過濾器,兩者過濾思路不同。
(1)抓包過濾器(Capture Filter)
通過設置抓包過濾器,Wireshark 僅抓取符合條件的數據包 ,其他的會被直接丟棄,常用于高負載網絡流量場景下減少數據存儲壓力和后續分析時間。
- 作用時間 :在數據包進入捕獲階段時過濾。
- 性能優勢 :通過減少需要捕獲的數據包數量,降低了存儲和處理的負擔。
- 基于BPF 語法:簡單但功能有限。
BPF 有四個元素可以自由組合:
- 類型 Type:host、net、port、portrange、ether 等。
- 方向 Dir:src、dst、src and dst、src or dst。
- 協議 Proto:tcp、udp、http、icmp、arp、broadcast 和 multicast 等。
- 邏輯運算符:and、or、not、!=、>、<、= 等。
BPF 語法的過濾器表達式:
[protocol] [direction] [host/port/net] [value]host 192.168.1.1 // 只抓取與 IP 地址 192.168.1.1 相關的所有數據包(包括源和目標)
tcp dst port 80 // 只抓取目標端口是 TCP 端口 80(HTTP)的數據包
!port 80 // 不抓取端口為 80 的數據包
!brocast // 不抓取廣播包
net 192.168.0.0/16 // 只抓取屬于 192.168.0.0/16 子網的所有流量
tcp port 443 and src net 10.1.0.0/24 // 只抓取源網絡為 10.1.0.0/24