0. 初めに
モバイルアプリの通信監視をしたい時、Charlesを使用するのが便利だと思います。
Charlesは通信監視機能だけでなく、特定の通信だけを見るフィルタリングや、レスポンス内容の書き換えができたりと、使用している方も多いのではないでしょうか?
しかし、便利さと引き換えに無料版は30日間しか使用できないという制約があります。。。
先日それで大変困ったところ知り合いにmitmproxyをお勧めしていただき、これが大変便利だったので、今回まとめました。
以下、皆さんの参考の一助になれば幸いです。
前提事項
-
MacBook Pro(M1搭載)でmitmproxyを使用する
-
MacPCとは別の、iOSデバイスの通信を確認する
目次
1. mitmproxyとは?
概要
- mitmproxyは、インタラクティブなコンソールインターフェースを持つオープンソースのネットワークプロキシツールです。主な機能は、ネットワーク通信(特にHTTPとHTTPS通信)を中継し、観察し、変更し、リダイレクトすることです。
- これにより、特定のネットワークリクエストやレスポンスの詳細を確認したり、それらを変更したりすることができます。
基本的なしくみ
- 基本的なコンセプトとして、ネットワーク上で情報が送受信されるとき、「リクエスト」(要求)と「レスポンス」(応答)の形式で行われますが。通常、このリクエストとレスポンスは直接、クライアント(あなたのコンピュータ)とサーバー(ウェブサイトをホストしているサーバー)の間でやりとりされます。mitmproxyは、このリクエストとレスポンスの間に入る「中間者」です。つまり、クライアントとサーバーの間に立ち、通信を中継します。
- 使用者のコンピュータ(クライアント)は、リクエストを直接ウェブサーバーに送る代わりに、そのリクエストをmitmproxyに送ります。次にmitmproxyはそのリクエストをウェブサーバーに送り、レスポンスを受け取ります。そして、そのレスポンスをあなたのコンピュータに戻します。
- この流れの中で、mitmproxyは全ての通信を見ることができます。そして、必要に応じてリクエストやレスポンスを変更することもできます。これにより、ある特定のリクエストがどのようなレスポンスを引き起こすのかを確認したり、通信の様々な側面をデバッグ(調査)したりすることができるのです!
まぁ長ったらしいことは後にして、実際にインストール手順を見ていきましょう!
2. インストール手順
Step1. PCへのインストール
- まず、terminalにて、以下のコマンドからインストールしましょう。
(体感15~20分くらいかかったかも)
brew install mitmproxy
注意
mitmproxyはPython製のソフトウェアなので、Pythonとそのパッケージマネージャpipが先にインストールされている必要があります。
その際は、公式URLからインストールしましょう。
Step2. iOSデバイスのプロキシを手動に設定
- モバイル端末を使用する場合、iOSデバイスのWi-Fi設定を変更し、
その通信(Wi-Fi)がMac上のmitmproxyを経由するように設定する必要があります。
- iOSデバイス上で「設定」アプリを開き、「Wi-Fi」を選択する
- 接続中のWi-Fiネットワークを選択し、その詳細設定画面を開く
- 一番下までスクロール。「プロキシ」を選択し、「手動」を選択する
- 「サーバ」と「ポート」にそれぞれMacの使用している Wi-FiのIPアドレスとmitmproxyがリッスンしているポート番号(デフォルトでは8080)を入力する
下記は、使用しているMacの システム設定 > Wifi > Wifiの詳細 > TCP/IPから確認可能
(図1を参照)
サーバー:Macの使用している WifiのIPアドレス
ポート:mitmproxyがリッスンしているポート番号(デフォルトでは8080)
Step3. 証明書のインストール
- mitmproxyの証明書をiOSデバイスに入れ、有効化します。
- iOSデバイスからsafari(ブラウザはなんでもOK) > “mitm.it“を検索
- 図2から"iOS"をダウンロード
- iOSデバイスの設定 > 一般 > VPNとデバイス管理 からmitmproxyを”インストール”する
- インストールし、信頼すると図3のように表示される
- iOSデバイスの設定 > 一般 > 情報 >証明書信頼設定 からmitmproxyを図4のように有効にする
Step4. mitmproxyを起動する
- MacPCのterminalから起動します。
(8080の部分は、Step2で設定したポート番号です。)
mitmweb -p 8080
- 起動すると以下のように表示されます。
- iOSデバイス側で通信を使用すると以下のように表示される。
3. 終了方法
Step1. mitmproxyを終了する
- terminalで開いたmitmproxy上で”control + c”で終了する
Step2. iOSモバイルでの終了処理
- 設定 > Wi-Fi > Mac が接続している Wi-Fi と同じネットワークのi アイコン > プロキシ構成 > オフ にする
4. 基本的な使用方法
その1. フィルタリング
- 特定の通信のみを表示することができます。
その2. インタセプティング
- インタセプティングというのは特定の通信を傍受することです。またそのままres, reqを書き換えることができます。
-
start タブのinterceptに書き換えをしたいURLを記載する
-
選択して"aキー"でリクエストを通すことが可能
-
リクエストを通すと、レスポンスを補足し、止まる
-
ペンのアイコン「edit」をクリックすると編集モードに入り、編集可能
-
編集が終わったらチェックマークをクリックする
-
"aキー"でリクエストを通すことが可能
上記のようにすることで、proxyを通った通信の傍受をし、内容の編集ができます。
※ちなみにzキーで通信を全て削除できます。