一、遇到的問題
本學期的計算機網路課程需要使用到Wireshark抓包工具進行網路抓包實驗,原本可以看到在該軟體中捕獲到的資料包都被按照各個協議進行分類好了,例如ARP包,TCP報文段,UDP資料包等等。但是當我想要抓取訪問某網站時傳輸的資料,例如訪問bilibili時,我先使用ping命令得到bilibili的IP地址:
得到的ip地址為:120.240.78.230
而當我使用這個ip地址在Wireshark中進行抓包篩選時卻發現什麼http的請求都找不到:
經查詢資料發現現在網際網路使用的HTTP協議基本都是HTTP2.0以上的了,因而資料包都是加密之後再在網路中進行傳輸,保證了資訊的安全性。因而我們收到的HTTP請求在Wireshark中只能看到一個個的TLS包,這些TLS包在使用祕鑰解密之後可以得到正確的HTTP報文。
二、解決方案
1. 動態生成簽名證書
以下解決方案是針對使用Chrome瀏覽器的。(也許Edge等瀏覽器也可以?)
首先我們需要通過Chrome瀏覽器獲得一個簽名證書,方法是給瀏覽器新增以下的啟動引數:
--ssl-key-log-file=D:\sslkey.log
這個只是一個範例,後面填寫的目錄可以是任意的位置。
為了方便起見,在windows系統下可以右鍵點選Chrome瀏覽器的快捷方式進行設定:
新增上引數後,我們使用該快捷方式啟動Chrome就會發現在上面設定的目錄下生成了對應的sslkey.log檔案:
2. Wireshark配置
然後開啟Wireshark,依次點選:編輯 -> 首選項 -> Protocols:
老版本的Wireshark中可以看到SSL的選項,而新版本中則變成了TLS。我們開啟相應的選項(SSL或TLS),然後將sslkey.log檔案的路徑配置到(Pre)-Master-Secret log filename
項中即可:
至此配置完成。
3. 最終效果
此時再次訪問b站首頁,可以在Wireshark中看到許多http2請求報文了,這些都是原先的TLS包解析後得到的結果: