如何除錯 Android 上 HTTP S 流量

2021-09-22 12:15:06 字數 2243 閱讀 9216

在android開發中我們常常會和api 打交道,可能你不想,但是這是避不開的。大部分情況下,除錯傳送網路請求和接收響應的過程都是十分痛苦的。

有多少次我們經過除錯發現api的呼叫失敗僅僅是因為我們的編碼錯了或者丟失了乙個http頭部引數?在除錯的過程中,我們發現出現錯誤的原因千奇百怪。總之我們要看到最終的請求是什麼樣子的不是一件容易的事情,響應也是如此。

解決這樣的問題有各種各樣的方法和門道,但是我今天要分享的是在我看來最快,最容易也是最可行的方法。

由於除錯http請求和響應是相當繁瑣的(除錯https更加繁瑣),因此在這種前提下你能使用的最好工具就是**。當然,你肯定知道什麼是**,所以我就不囉嗦它的定義了。

現有的**工具中它們的用法,特性以及作業系統的相容性都各不相同,如何選擇一款合適的**呢?要我說,簡單點,就用mitmproxy。

我已經無法用語言來形容mitmproxy的方便和強大了。用mitmproxy 官網上的介紹一句話,就是「an interactive, ssl-capable man-in-the-middle proxy for http with a console inte***ce」。沒錯,你可以通過控制台來操作它;沒錯,它還支援https;沒錯,它允許「對流量進行攔截,檢測,修改和回放」;沒錯,它還是跨平台的,因為它是用python寫的。對了,我說了它是完全免費的這件事了嗎?

使用它也是相當容易的。一旦你安裝了它,便可通過在控制台輸入以下命令啟動它:

1

$mitmproxy[-bip_addr][-pport]

**已經在執行,你可以開始攔截網路流量了。接下來你就需要配置android手機,將所有的流量都重定向到之前命令裡設定的**伺服器位址上去(ip_addr + port)。

現在我們需要在android手機上進行**配置。具體步驟如下:

進入android的wi-fi設定

長按當前連線的網路

選擇「修改網路」選項

勾選「顯示高階選項」

啟用**伺服器並將**設定為「手動」

輸入之前設定好的的ip位址和埠。

如果要禁用**同理。現在android端的設定就大功告成了。

就這麼簡單,對了,它還不需要root許可權哦?

正如前面所提到的,mitmproxy還支援https攔截。這個特性讓你在保持api endpoint 不變的情況下除錯生產環境裡的api變得異常方便。然而由於https的工作方式,我們需要安裝乙個自定義的ssl證書,讓mitmproxy對所攔截的流量進行解密。

聽起來https攔截的步驟好像有點麻煩,其實很簡單。你只需按照mitmproxy官網的這篇設定指南便可輕易地完成設定。記得在啟動mitmproxy的時候需要額外新增乙個引數,如下命令所示:

1

$mitmproxy-aip_addr-pport—-no-upstream-cert

不過此處還有個小問題。android是以一種加密的形式來儲存ssl證書的,而這種加密的形式即使用者設定的手機解鎖資訊。也就是說,你在android上安裝任何ssl證書之前,系統都會提示你設定解鎖手機的方式,比如輸入pin碼,密碼或者是某種圖案。

3g/4g這種情況下設定**更難了。系統設定中沒有為3g/4g連線提供**設定介面。但是!你可以通過你的手機「移動熱點」功能來實現在3g/4g這種情況下設定**。你要準備的就是:

一台可以連線3g/4g網路的android手機

一台開啟了「開發者模式」的手機(另一台了)

你的膝上型電腦

接下來的步驟就簡單啦:

在第一台手機上啟用「移動熱點」功能

將你的膝上型電腦和第二台手機(「開啟了開發者模式」)連上移動熱點

在膝上型電腦上啟動 mitmproxy,並將ip位址設為hotspot所對應的(通常是192.168.43.*** 之類的)

在第二台手機上使用proxy settings設定**

ok,在3g/4g這種情況下設定**就是這樣子的。

到目前為止,我還試過其他兩種**工具,charles和fiddler。 但是mitmproxy完爆他們兩個。charles 可能是在功能,靈活性以及作業系統支援這幾個方面和mitmproxy最接近的,但是它一不免費,二不開源。 對於 fiddler, 它只能在windows平台上使用。

mitmproxy + proxy settings 的結合讓我省了不少心,我希望它們也能為你所用。

update:有同學反應對這個工具到底怎麼使用不是很清楚,於是我打算在本文基礎上再增加一些實踐相關的文字,後來發現篇幅過於臃腫,乾脆新寫了一篇關於mitmproxy實踐的文章,希望能給大家一些啟發。

Tomcat Server是如何處理http請求的

下面就讓我們簡單了解一下 tomcat server處理乙個http請求的過程 假設來自客戶的請求為 jsp1 請求被傳送到本機埠8080,被在那裡偵聽的coyote http 1.1 connector獲得 2 connector把該請求交給它所在的service的engine來處理,並等待來自e...

Tomcat Server是如何處理http請求的

下面就讓我們簡單了解一下 tomcat server處理乙個http請求的過程 假設來自客戶的請求為 jsp1 請求被傳送到本機埠8080,被在那裡偵聽的coyote http 1.1 connector獲得 2 connector把該請求交給它所在的service的engine來處理,並等待來自e...

Mac中wireshark如何抓取HTTPS流量?

某些場景下,我們需要分析 https流量,chrome提供的devtools工具在頁面跳轉時無法檢視之前的請求。使用wireshark能夠全量抓取整個流程,本文主要是將網上查詢到的資料整理,以便日後查閱。以chrome為例,mac中詳細操作如下 sudo find iname google chro...