原文地址:https://blog.csdn.net/qq_38378384/article/details/105959008
不少人覺得抓包是一個很高級的東西,感覺涉及到了網絡的知識,相信不少從業互聯網行業的人對抓包是沒有概念的,做web開發的同學可能比較熟悉使用 chrome 的開發者面板來進行抓包,但是對於 wireshark 或者是 tcpdump 這類的工具卻並不熟悉,本篇文章就可以讓你快速上手 wireshark 的基礎使用,話不多說,快來體驗吧
1.下載 wireshark 軟件
工欲善其事必先利其器,沒有工具咋干活嘞,wireshark 的下載是十分簡單的,這里我推薦使用騰訊軟件中心
的安裝包,這個平台包括了大多數常用的軟件,且安全無毒,企鵝爸爸還是做了一件好事的,下載wireshark
這是個十分強大的工具,跟fiddler 不同的是,他幾乎可以抓到所有類型的包,例如 TCP , UDP, ICMP, HTTP 等,而 fiddler 只能抓取 HTTP 的包
2.wireshark 的基礎面板介紹
2.1 網卡接口列表
我們可以看到,wireshark 的面板其實是十分簡潔的,其中網卡列表就是選擇你要抓取的包實際走的是哪個網卡接口,一般來說我們下面三種:
以太網 :直接連接網線的一般選這個
WLAN : 電腦接 WiFi 的一般選這個
Adapter for loopback traffic capture:: 迂回路線,就是本機自己的網絡,抓的是 127.0.0.1 的包
2.2 捕獲過濾器(前置過濾器)
用於減少抓取的報文體積,使用 BPF 語法,功能相對有限,主要是是過濾的作用,網絡世界的包太多太雜,如果沒有過濾器,很難找到我們真正想要的包,后面我再講解相關的語法規則,這里我們暫時跳過
3.來一起愉快的抓包
以抓取我的小站的 http 報文為例
首先,我們需要簡單了解一些基礎的網絡知識,
http所使用的的端口為 80,https 所使用的的端口為 443
http 通訊之前需要經歷 TCP三次握手來建立連接,https 則是 三次握手 + ssl 握手
因為https 的報文是經過加密的,如果需要抓到解密后的報文,需要特別配置 wireshark,這個后面講解
http 的報文主要包括 header 頭部和 body 體,以一行空行進行分割
http 的請求方式主要有八種,其中最為常見的是 GET ,POST ,OPTION,HEADER
http 協議在七層模型的最上層,屬於應用層協議,基於 TCP/IP 協議上實現
上面這些是一些十分基礎的概念,了解了這些我們就可以愉快的抓包,電腦上時刻都在和外界通信,如果我們需要拿到我們需要的包,那么就必須要進行過濾,捕獲過濾器就可以幫我們簡單實現過濾效果
首先,在捕獲過濾器中填寫:host www.mclink.xyz (博主以前玩的域名,證書過期了所以可以用來抓http的包)
說明我們要抓取的是基於這個域名下通訊的,然后選中你要捕獲的網絡接口,例如我的電腦是直接接的網線,所以選的是以太網,然后點擊上面工具欄的 捕獲 - 開始(或者是快捷鍵 Ctrl + E )
點擊開始是這樣的:
此時,軟件已經在捕獲host 為 www.mclink.xyz 的報文了,我們可以看到,左上角是可以暫停抓包的,如果有一些不需要的包存在,那么可以暫停,然后點最左邊的重新捕獲,可能會彈出下面的提示:
也就是說,我們是可以保存抓包的結果的,一般來說,如果沒有需要,就選擇繼續不保存,
開始捕捉后,打開瀏覽器,地址欄輸入:www.mclink.xyz ,然后就可以看到下列的內容,如果不想看到多余的其他包,抓到需要的包后可以點擊停止抓包
其中,time 這個默認值捕獲開始經過的秒數,如果想改成帶日期的,可以在 視圖-時間顯示格式 來對應選擇自己想要的格式
source 代表的是包的源ip地址,destinations 是目標ip地址,一般來說,這時候源ip就是你的公網ip,目標ip就是我的服務器公網ip,我們可以看到,一開始有三個 tcp 的報文(如果你見到了多個三次握手的報文,不要驚奇,這是正常的,瀏覽器為了效率,會發起多次握手),這是在進行三次握手來建立連接,三次握手的詳細圖我放在下面給你們作為參考
(圖片來源於極客時間)
三次握手的原理看似簡單,也就是來自兩端的一來一回確認,第一次客戶端發送 SYN 報文 給服務端 說老大我想和你玩,然后服務端 發送回一個 SYN/ACK 報文,說 好的小弟我陪你玩,然后客戶端 再發送 ACK 包 給服務端說 謝謝老大願意和我玩,然后兩個人就可以愉快的玩耍了,但其實細究,三次握手還有很多可以深究的地方,例如 SYN 攻擊 等,這里我暫時不細說,后面出有關 TCP 協議相關的文章再和大家一起分享哈哈哈。
經歷了三次握手,我們可以簡單認為已經雙方已經確認了一個通訊鏈路,這個連接可以是長連接也可以是短連接,這點我們先不糾結,在這里還不是重點哈,我們可以看到,在第四個客戶端請求報文中,發送了一個 GET 請求請求獲取資源,然后服務端響應了一個 404 的報文,說明沒有找到資源,這是一個最為簡單的請求案例了,只包含了握手和一來一回的兩個請求,卻也是一個較為完整的案例
4.配置 wireshark 解析 https 請求
原理:配置 chrome 瀏覽器 DEBUG 日志中的握手信息生成密鑰,wireshark 獲得對稱加密密鑰對密文進行解密
4.1 配置 Chrome 輸出 DEBUG 日志:
4.2 在 wireshark 中配置解析 DEBUG 日志
5. 報文結構
上面的分別對應了
幀 (數據鏈路層)
以太網 (mac 層,基於Mac 地址通訊)
ipv4 (網絡層)
tcp (傳輸層)
http (應用層)
內容(數據內容)
我們知道,網絡是有層次結構的,主要是分為 物理層,數據鏈路層,網絡層,傳輸層,應用層。 在每一層,對 “包” 的描述都是不同的。
(圖片來源於極客時間)
比特流(bit)<=> 幀 (frame)<=> 包 (packet)<=> 報文 (sequence) <=> 數據
這個軟件會幫我們解析報文,並且拆分成各層的結構給我們查看,也就是說,我們可以看到在每一層中數據的大致樣貌,在網絡中,可以沒上層,但是必須有下層,這一點可以用電梯來記憶,上下電梯都是必須順序上去,順序下來,不可能會跳過中間的某一層。在每一層中,會加上(或者去除)屬於該層的額外補充數據(頭部或者尾部),之所以網絡需要分層,也是有原因的
分層的好處: 例如升級 HTTP2.0 時,應用層在升級,但是網絡層卻沒有影響
分層的壞處:主要是網絡傳輸,可能會造成數據的延遲,可以使用Intel的dpdk來繞過內核中的處理流程,這個包是一個用戶態驅動和數據結構及算法的套件
在網絡學習中,抓包是必不可少的一項技能,通過抓包分析數據在每一層中的變化以及數據結構和內容,有利於我們深入解決相關問題,后面我會出更多和網絡相關的文章,和大家一起探索網絡世界。
————————————————
版權聲明:本文為CSDN博主「MClink」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_38378384/article/details/105959008