時隔 3 年,重新接觸了移動端 h5 頁面開發(fā),上一次還是大四實習(xí)。這一次是 hybrid 開發(fā),涉及到 h5 頁面與原生 app 的交互,h5 頁面需要與原生打通登錄態(tài),以及調(diào)用原生app 的接口,比如調(diào)用原生相機進行二維碼掃描。跟微信小程序開發(fā)不同,本地開發(fā)時微信有提供微信開發(fā)者工具,可以本地模擬調(diào)用而我這邊需要每次都打包靜態(tài)文件,上傳服務(wù)器才能調(diào)試,非常麻煩。
【資料圖】
能不能在原生 app 加載線上 h5 時,跑本地的代碼呢?答案是可以的,通過抓包工具比如 whistle 就可以做到攔截線上頁面請求數(shù)據(jù),再響應(yīng)本地代碼,本文主要講述抓包的原理和抓包工具 whistle 使用。
二、抓包的原理1.什么是抓包?抓包就是將網(wǎng)絡(luò)傳輸發(fā)送與接收的數(shù)據(jù)包進行截獲、重發(fā)、編輯、轉(zhuǎn)存等操作,通過抓包可以:
分析網(wǎng)絡(luò)問題業(yè)務(wù)分析分析網(wǎng)絡(luò)信息流通量網(wǎng)絡(luò)大數(shù)據(jù)金融風(fēng)險控制探測企圖入侵網(wǎng)絡(luò)的攻擊探測由內(nèi)部和外部的用戶濫用網(wǎng)絡(luò)資源探測網(wǎng)絡(luò)入侵后的影響監(jiān)測鏈接互聯(lián)網(wǎng)寬頻流量監(jiān)測網(wǎng)絡(luò)使用流量(包括內(nèi)部用戶,外部用戶和系統(tǒng))監(jiān)測互聯(lián)網(wǎng)和用戶電腦的安全狀態(tài)滲透與欺騙...回顧下計算機網(wǎng)絡(luò)知識,數(shù)據(jù)在網(wǎng)絡(luò)上是以很小的幀的單位傳輸?shù)模瑤ㄟ^特定的稱為網(wǎng)絡(luò)驅(qū)動程序的程序進行成型,然后通過網(wǎng)卡發(fā)送到網(wǎng)線上,通過網(wǎng)線到達目的機器,在目的機器的一端執(zhí)行相反的過程。接收端機器的以太網(wǎng)捕獲到這些幀,并告訴操作系統(tǒng)幀已到達,然后對其進行存儲。在這個傳輸和接收的過程,就可以使用抓包工具(Sniffers)進行抓包,作為前端開發(fā)者,通常是抓取應(yīng)用層的 HTTP/HTTPS 的包。
2. HTTP/HTTPS 抓包原理HTTP/HTTPS 是應(yīng)用層使用的通信協(xié)議,常見的應(yīng)用層體系結(jié)構(gòu)是客戶端-服務(wù)器體系。
對運行在不同端系統(tǒng)上的客戶端程序和服務(wù)端程序是如何互相通信的么?實際上,在操作系統(tǒng)上的術(shù)語中,進行通信的實際上是進程而不是程序,一個進程可以被認(rèn)為是運行在端系統(tǒng)中的一個程序。
在 web 應(yīng)用程序中,一個客戶瀏覽器進程與一臺服務(wù)器進程進行會話交換報文。
瀏覽器進程需要知道接收進程的主機地址,以及定義在目的主機中的接收進程的標(biāo)識符,也就是目的端口。
多數(shù)應(yīng)用程序由通信進程對組成,每對中的兩個進程互相發(fā)送報文。進程通過一個稱為套接字的軟件接口向網(wǎng)絡(luò)發(fā)送報文和從網(wǎng)絡(luò)接收報文。
進程可以類比一座房子,而它的套接字可以是它的門,套接字是應(yīng)用層與運輸層之間的端口。
知道了兩個進程的通信流程,我們要怎么抓包呢?舉一個生活中的例子,小明暗戀小雯,于是他寫了一封情書,但他有點害羞,找了小雯的好朋友小花幫忙傳遞情書。這個時候,小花可以負(fù)責(zé)小雯與小明之間的情書傳遞,作為中間人,她可以偷偷查看他們的情書內(nèi)容。
思路就是設(shè)置一個中間人進程負(fù)責(zé)抓包,每次目標(biāo)進程之間的會話都先與中間人進程通信,再進行轉(zhuǎn)發(fā)。
(1) HTTP 抓包原理在 http 標(biāo)準(zhǔn)中,沒有對通信端身份驗證的標(biāo)準(zhǔn)。對于服務(wù)器來說,它接收的 HTTP 請求報文只要格式符合規(guī)范,就發(fā)送響應(yīng)報文。
對于客戶端來說也是如此,它無法校驗服務(wù)器的身份,比如它連接的 http://www.jecyu.com? 的主機,但由于中間節(jié)點的存在,最終連接的可能是 http://www.jerry.com 的主機。
因此,對于 HTTP 抓包,無需做過多的處理,只需要讓中間人負(fù)責(zé)轉(zhuǎn)發(fā)客戶端和服務(wù)端的數(shù)據(jù)包。
(2) HTTPS 抓包原理HTTP 是明文傳輸,容易受到中間人攻擊,不安全。
HTTPS 語義仍然是 HTTP,只不過是在 HTTP 協(xié)議棧中 http 與 tcp 之間插入安全層 SSL/TSL。
安全層采用對稱加密的方式加密傳輸數(shù)據(jù)和非對稱加密的方式來傳輸對稱密鑰,解決 http 數(shù)據(jù)沒有加密、無法驗證身份、數(shù)據(jù)容易纂改三個核心問題。
HTTP + 加密 + 認(rèn)證 + 完整性保護 = HTTPS
其中驗證身份問題是通過驗證服務(wù)器的證書來實現(xiàn)的,證書是第三方組織(CA 證書簽發(fā)機構(gòu))使用數(shù)字簽名技術(shù)管理的,包括創(chuàng)建證書、存儲證書、更新證書、撤銷證書。
瀏覽器連接至一個 HTTPS 網(wǎng)站,服務(wù)器發(fā)送的不僅僅只是服務(wù)器實體證書,而是一個證書鏈,但不包含根證書,根證書會被內(nèi)嵌在 Windows, Linux, macOS, Android, iOS 這些操作系統(tǒng)里。
其中校驗證書分為兩步,證書的簽發(fā)者校驗和服務(wù)器實體證書校驗。
證書鏈校驗:
瀏覽器從服務(wù)器實體證書的上一級證書(比如 B 證書)獲取公鑰,用來校驗服務(wù)器實體證書的簽名(簽名是通過 CA 機構(gòu)的私鑰簽名的),校驗成功則繼續(xù),否則證書校驗失敗。瀏覽器從 B 證書的上一級證書(比如 C 證書)獲取公鑰,用來校驗 B 證書的簽名,校驗成功則繼續(xù),否則證書校驗失敗。瀏覽器迭代校驗每張證書的簽名,最后會找到自簽名的根證書(簽發(fā)者和使用者是同一個人),由于瀏覽器已經(jīng)集成了根證書,可以充分信任根證書的公鑰,完成最后的簽名。服務(wù)器實體證書校驗:訪問的域名信息是否與證書一致、日期、證書擴展校驗等。
了解完證書校驗后,我們來看看具體的 https 通信流程:
首先是 tcp 的三次握手建立連接接著是非對稱加密的握手過程client 發(fā)送隨機數(shù) random1 + 支持的加密算法集合server 收到信息,返回選擇的一個加密算法+ 證書 (包含S_公鑰) + random2client 驗證證書有效性,并用 random1 + random2 生成 pre-master-secure,通過服務(wù)端公鑰加密發(fā)送給 serverserver 收到 pre-master-secure,根據(jù)約定的算法使用S_私鑰對 pre-master-secure 解密,然后用加密算法生成 master-secure(對稱加密的密鑰),然后發(fā)送給 clientclient 收到生成的 master-secure,對稱加密密鑰傳輸完畢最后,就可以使用 master-secure 進行真正的數(shù)據(jù)對稱加密傳輸。中間人想要抓包,需在 HTTPS 加密通信之前:
截取客戶端發(fā)送的包含證書的報文,偽裝成服務(wù)端,把自己的證書發(fā)給客戶端,然后拿到【客戶端返回的包含對稱加密通信密鑰的報文】,生成中間人與客戶端對稱加密的密鑰。同樣偽裝成客戶端,以服務(wù)端自己的非對稱公鑰加密【客戶端返回的包含對稱加密通信密鑰的報文】發(fā)給服務(wù)端,獲得服務(wù)端生成的對稱加密密鑰。這樣一來,加密通信建立完成,而中間人拿到了通信的數(shù)據(jù)密鑰,可以查看、修改 HTTPS 的通信報文。這里客戶端與中間人通信、中間人與服務(wù)端通信,都是正常建立了 HTTPS 加密連接的。
其中很重要的一步是瀏覽器的根證書校驗,CA 機構(gòu)不可能隨便給一個中間人簽發(fā)不屬于它的域名證書,也就不在客戶端的操作系統(tǒng)上了,因此只能把中間人的根證書,導(dǎo)入到客戶端的操作系統(tǒng)了,以此完成建立加密通信時對中間人證書的驗證。
3. 電腦如何抓手機的包要想通過電腦端獲取手機 Web 應(yīng)用的數(shù)據(jù)包,根據(jù)前面所學(xué),就需要中間人策略。
PC 端建立一個服務(wù)器中間人進程,偽裝為 web 應(yīng)用的目標(biāo)服務(wù)器。手機端 web 應(yīng)用發(fā)送的請求數(shù)據(jù)先經(jīng)過中間人,中間人進行攔截處理再發(fā)送給目標(biāo)服務(wù)器。反過來,目標(biāo)服務(wù)器發(fā)送的數(shù)據(jù)包先通過中間人,再由中間人響應(yīng)給瀏覽器客戶端。
這里要注意的是,無論是個人電腦PC,還是移動端手機,都需要接入互聯(lián)網(wǎng)網(wǎng)絡(luò),可以相互找到對方才能建立通信。
一般對開發(fā)來說,個人電腦本地起的服務(wù)器進程,在公網(wǎng)上是訪問不到的。一般是無線局域網(wǎng),個人電腦與手機端連接同一個路由器發(fā)出的 Wi-Fi,就可以相互通信。
具體步驟:
在 PC 電腦本地起一個服務(wù)器進程,監(jiān)聽一個端口比如 8899在手機上連接同一個局域網(wǎng),配置網(wǎng)絡(luò)代理,指向 PC 端的 IP 地址和 8899 端口這樣一來,手機上所有的網(wǎng)絡(luò)通信都會被先轉(zhuǎn)發(fā)到 PC 端的 8899 端口,就可以對數(shù)據(jù)包進行分析處理拿訪問 youtuBe 來說,比如電腦已經(jīng)使用【服務(wù)器軟件】成功訪問,此時只要手機配置代理指向電腦 ip 地址和指定端口,手機就可以同樣訪問 youtuBe了。
三、抓包工具 whistle1. whistle 是什么Whistle 是基于 Node 實現(xiàn)的跨平臺抓包免費調(diào)試工具,其主要特點:
完全跨平臺:支持 Mac、Windows 等桌面系統(tǒng),且支持服務(wù)端等命令行系統(tǒng)
功能強大:
支持作為 HTTP、HTTPS、SOCKS 代理及反向代理支持抓包及修改 HTTP、HTTPS、HTTP2、WebSocket、TCP 請求支持重放及構(gòu)造 HTTP、HTTPS、HTTP2、WebSocket、TCP 請求支持設(shè)置上游代理、PAC 腳本、Hosts、延遲(限速)請求響應(yīng)等支持查看遠程頁面的 console 日志及 DOM 節(jié)點支持用 Node 開發(fā)插件擴展功能,也可以作為獨立 npm 包引用操作簡單:
直接通過瀏覽器查看抓包、修改請求所有修改操作都可以通過配置方式實現(xiàn)(類似系統(tǒng) Hosts),并支持分組管理項目可以自帶代理規(guī)則并一鍵配置到本地 Whistle 代理,也可以通過定制插件簡化操如何快速使用 whistle先安裝 node,建議用 nvm 管理,全局安裝 whistle:
npm i -g whistle & w2 start
安裝后,可以在電腦上設(shè)置全局代理,代理的端口為 8899.
w2 proxy // 設(shè)置全局代理w2 proxy off // 關(guān)閉全局代理
就可以通過瀏覽器訪問 http://127.0.0.1:8899/ 查看抓包、修改請求等。
如果你不想使用全局代理,就可以安裝 SwitchyOmega 插件,按需對某些網(wǎng)站設(shè)置 whistle 代理。
選擇 Whistle 代理:
設(shè)置 Whistle 代理:
2. whistle 可以做的事情whistle 可以做的事情很多,以下是官網(wǎng)圖:
一些例子配置如下圖所示:
四、whistle 實戰(zhàn)案例1. 原生 app 加載 PC本地代碼開發(fā)在原生 app 上已經(jīng)通過 h5 域名加載了 web 頁面,但是本地開發(fā)時不想每次都走流水線或本地打包上傳代碼。
需要把原生 app 的請求代理到本地服務(wù)器上來,前提條件是 wifi 手機與電腦可相互訪問,也就是前面提到的電腦抓 pc 的包。
因為我的 web 服務(wù)端是 https 應(yīng)用,因此需要下載 whistle 提供的根證書,手動導(dǎo)入到手機上。
點擊 HTTPS 菜單,然后使用手機掃描二維碼,使用手機瀏覽器打開即可下載,在手機證書中設(shè)置進行導(dǎo)入并且設(shè)置信任。
此時,再在手機上配置代理指向 PC 電腦的 IP和 whistle 監(jiān)聽的端口即可在電腦上截獲數(shù)據(jù)包。
我本地webpack 啟動的服務(wù)器應(yīng)用訪問地址為:xxx.xxx.xxx.xxx:8080
whistle 的配置規(guī)則:
# Rules# 訪問首頁走本地jecyu.com/webs/short-transport http://xxx.xxx.xxx.xxx:8080?deptCode=755DL # 首頁路徑# 后續(xù)的請求都使用本地代碼jecyu.com http://xxx.xxx.xxx.xxx:8080?deptCode=755DL
其中試過在原生 app 訪問本地應(yīng)用時出現(xiàn)錯誤“ webpack 會提示 invalid host header”,解決方案是在 devServer 配置添加即可:
devServer: {allowedHosts: "all",}
至此,成功讓原生 app 訪問PC 端本地的開發(fā)代碼。
2. 查看移動端的 DOM 樣式Whistle 能夠通過內(nèi)置的 Weinre 去實現(xiàn)查看移動端的 DOM 樣式,配置規(guī)則如下:
# 設(shè)置 weinrehttps://juejin.cn weinre://test
手機上重新訪問 juejin.cn 網(wǎng)站,然后打開 weinre 可以看到如下,綠色表示遠程連接成功。
可以點擊 Element 查看手機上網(wǎng)頁 DOM 結(jié)構(gòu)、樣式等信息。
也可以在 console 控制臺中,執(zhí)行代碼,比如 alert ,手機應(yīng)用上會顯示彈框。
五、總結(jié)學(xué)會抓包是軟件開發(fā)人員必須掌握的調(diào)試技能,本文先介紹抓包的原理,再介紹抓包工具 whistle的使用,whistle 非常強大,本文只是粗略的介紹,更多的使用技巧,大家可以查看官方文檔?whistle 文檔。
關(guān)鍵詞: 操作系統(tǒng) 個人電腦 本地代碼 加密算法
X 關(guān)閉
X 關(guān)閉
- 15G資費不大降!三大運營商誰提供的5G網(wǎng)速最快?中國信通院給出答案
- 2聯(lián)想拯救者Y70發(fā)布最新預(yù)告:售價2970元起 迄今最便宜的驍龍8+旗艦
- 3亞馬遜開始大規(guī)模推廣掌紋支付技術(shù) 顧客可使用“揮手付”結(jié)賬
- 4現(xiàn)代和起亞上半年出口20萬輛新能源汽車同比增長30.6%
- 5如何讓居民5分鐘使用到各種設(shè)施?沙特“線性城市”來了
- 6AMD實現(xiàn)連續(xù)8個季度的增長 季度營收首次突破60億美元利潤更是翻倍
- 7轉(zhuǎn)轉(zhuǎn)集團發(fā)布2022年二季度手機行情報告:二手市場“飄香”
- 8充電寶100Wh等于多少毫安?鐵路旅客禁止、限制攜帶和托運物品目錄
- 9好消息!京東與騰訊續(xù)簽三年戰(zhàn)略合作協(xié)議 加強技術(shù)創(chuàng)新與供應(yīng)鏈服務(wù)
- 10名創(chuàng)優(yōu)品擬通過香港IPO全球發(fā)售4100萬股 全球發(fā)售所得款項有什么用處?