抓包就是將網路傳輸傳送與接收的資料包進行截獲、重發、編輯、轉存等操作,也用來檢查網路安全。抓包也經常被用來進行資料擷取等。
Charles透過將自己設定成系統的網路訪問代理伺服器,使所有的網路請求都透過它,以此達到對網路封包的擷取和分析。
網路傳輸協議:
http(HyperText Transfer Protocol,超文字傳輸協議) 是一種無狀態協議,就是說客戶端傳送一次請求,伺服器端接收請求,經過處理返回給客戶端資訊,然後客戶端和伺服器端的連結就斷開了,為了維護他們之間的連結,讓伺服器知道這是前一個使用者傳送的請求,必須在一個地方儲存客戶端的資訊,有兩種解決方案,一是在客戶端儲存(Cookie),二是在伺服器端儲存(Session)。
https(Hypertext Transfer Protocol over Secure Socket Layer,安全為目標的HTTP通道),即HTTP下加入SSL層,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議 要比http協議安全。
tcp(Transmission Control Protocol,傳輸控制協議):三次握手 面向連線、傳輸可靠(保證資料正確性,保證資料順序)、用於傳輸大量資料(流模式)、速度慢,建立連線需要開銷較多(時間,系統資源)
Udp(User Data Protocol,使用者資料報協議) 面向非連線、傳輸不可靠、用於傳輸少量資料(資料包模式)、速度快。
以https為例,看看抓包的原理過程
Charls代理抓包過程:
charls的作用:
我們在進行B/S架構的Web專案開發時,在前端頁面與後臺互動的除錯的時候,通常使用在JSP中加入“debugger;”斷點,然後使用瀏覽器的F12開發者工具來檢視可能出錯的地方的資料。或者使用HttpWatch來抓包分析。
在開發移動端專案沒有網頁的情況下,就不能透過這種方式抓取資料進行分析了。這時可以使用Charles滿足以上要求。它把客戶端的請求資料,以及服務端返回的資料完完整整地抓取下來。
對於測試工程師來說兼抓包定位協議類bug、設定網路閥來進行網路測試、對協議類的介面資料進行對映已修改環境,還可以對伺服器進行簡單壓力測試等等實用功能。
常用charls做什麼?
(1)過濾網路請求
透過Filter過濾:
在 Filter 欄中輸入想要過濾出來的關鍵字,比如只想檢視包含關鍵字:baidu 的請求,只需要在 Filter 欄中輸入關鍵字:baidu 即可;當然也支援萬用字元,比如我們想要檢視包含關鍵字:itunes,並且以 。com 結尾的請求,只需要在 Filter 欄中輸入 itunes。*。com 即可
透過Include過濾:
可以透過 “Proxy”->“Recording Settings”,選中 Include 欄,新增一項, 設定需要抓取的包,比如我只想抓取 www。baidu。com 域名下的請求,可以按照如下設定,就能只去抓取符合規則的目標請求,當前也可以在 Exclude 中設定排除的請求。
總結:
Filter 和 Include 的區別就是: Include 是隻抓取符合要求的請求,不符合的請求就不再抓取,而 Filter 只是將先要抓取的請求篩選出來,但是還是去抓取了所有的請求;綜合兩者我們可以按照自己的需求進行設定如何篩選
(2)代理轉發
我們在進行本地開發功能的測試時,可以將手機請求的地址轉發到本機地址的程式進行執行。右鍵選擇Map Remote,配置請求轉發的地址。
(3)重放和編輯
點選一個請求,右擊彈出選單欄,我們可以進行各種操作,比如複製、儲存、編輯、重複請求等等,我們可以編輯修改任意請求資訊,比如URL地址、埠、引數等等,點選“Execute”按鈕即可傳送修改後的請求。
透過 Repeat Advanced 高階重放功能可以作為簡單的效能測試,可以設定重複次數、併發數以及延時等。
(4)模擬慢速網路
有時候開發中需要測試使用者在網路情況比較的差的時候應用的表現情況,可以使用Charles限流設定,“Proxy” -> “Thorttle Settings” 中設定,或者只針對某些域名進行設定,如下針對特定Hosts的設定。
(5)Breakpoints - 斷點功能
有時候對於一些特殊請求在發往伺服器之前想要修改一些引數,或者在伺服器響應完成之後修改響應資訊,此時可以使用Charles的斷點功能,類似Xcode中的斷點除錯,設定斷點之後,當有網路請求的時候Charles會自動跳轉到斷點處,此時我們就能進行相關的修改,斷點設定步驟:“Proxy” -> “Breakpoints Settings”,彈出設定欄,選中 “Enable Breakpoints”,新增需要除錯的請求即可除錯。
擴充套件
四大抓包工具,總體可以分為兩類:
(1)設定代理抓取http包
Charles
優點:使用簡單,只需配置一下代理地址就可以,要抓取https協議的配置也很簡單,只要安裝下charles的證書就可以了
缺點:只支援抓取http協議
mitmproxy這些軟體
優點:命令列操作,可以在無GUI介面的伺服器上使用,安裝好mitmproxy提供的證書後,也可以分析https請求,不僅可以抓包,還支援對包的攔截、修改、重複,這是常規抓包軟體不具備的
缺點:僅支援http協議的抓包
(2)直接抓取經過網絡卡的所有協議包
最出名就是大名鼎鼎的wireshark
優點:功能強大,可以抓取所有協議的包,抓到的包容易分析
缺點:由於線上伺服器沒有GUI,只有命令列,因此無法在線上伺服器使用無法分析https資料包,由於wireshark是在鏈路層獲取的資料包資訊,所以獲取到的https包是加密後的資料,因此無法分析包內容。當然,我們可以對https資料包進行解密, 但是操作具有一定的複雜度,可能要消耗很多時間。
linux自帶的抓包軟體tcpdump
優點:功能強大,可以抓所有協議的包,linux自帶,直接在所有的伺服器上面抓包,這是其他抓包軟體不具備的
缺點:資料包分析困難,需要配合wireshark使用,和wireshark一樣,無法分析https資料包
對於這幾個抓包神器,總結了下使用場景:
(1)只抓http協議的話,推薦使用mitmproxy。mitmproxy豐富的功能不僅可以滿足我們的抓包需求,還可以提升我們的工作效率。比如測試可以抓包後一鍵重發請求來重現bug,開發除錯的時候可以修改請求內容等等。
(2)如果是在線上的沒有GUI的伺服器,推薦使用tcpdump,雖然mitmproxy也可以支援命令列抓包,但是生產環境的伺服器最好不要亂安裝第三方外掛。另外,大多數伺服器都有裝tcpdump。我們可以透過把請求的內容輸出到檔案,然後複製會自己的電腦用wireshark分析。
(3)想要抓取http以外的協議的話,直接上wireshark。功能強大
(4)對於Charles,感覺用了mitmproxy之後,就基本用不上Charles了。
抓包和爬蟲的區別:
(1)爬蟲是搜尋引擎方面的,比如你在百度搜索 關鍵字 “劉德華” ,然後百度利用爬蟲演算法,就會獲取和劉德華有關的所有網頁,這就是搜尋的結果。
(2)—抓包是抓取網路資料,這個資料包括很多內容,不一定只是網頁,比如也可能是圖片,影片流等等。
簡單說,爬蟲就是針對為了尋找特定網頁而設計的演算法寫成的軟體。抓包就是根據標準的網路傳輸協議來設計的一套軟體。
從難度上來講,爬蟲很難設計,因為涉及到大資料處理。抓包就比較簡單了,因為有標準的協議,處理的資料物件複雜度低。