Macでのデバッグ
MacではChuteと見たいトラフィックが同じマシンにあるため、iPhoneのガイドが何ステップも費やすもの — ケーブル、リスナー、パスワード — は不要です。代わりに別の問いが立ちます: そもそもトラフィックがChuteに届いているか。macOSではアプリがプロキシを無視することを選べるからです。
1. トラフィックをChuteに通す
2 つの仕組みがあり、互いに独立しています。メニューにはどちらも並んでいます:
- システムプロキシ — メニュー最上部のトグル。ChuteをシステムのHTTP/SOCKSプロキシとして登録します。システムのプロキシ設定を読むアプリ(ブラウザ、多くのGUIアプリ)はChuteを通り、読まないアプリは影響を受けません。
- 拡張モード(⌘E)— ネットワーク層でトラフィックを捕捉するので、アプリがプロキシをどう思っているかは関係なくなります。プロキシに一切対応していないアプリにはこれが必要です。承認の流れと 2 つの実装タイプは拡張モードを参照してください。
意外なのはターミナルのツールです。curl、git、npm などはシステム設定ではなく環境変数 HTTP_PROXY/HTTPS_PROXY を読みます。メニューの シェルの export コマンドをコピー(⌘C)が正しい 1 行をクリップボードに入れてくれます —
export HTTPS_PROXY=http://127.0.0.1:8118;export HTTP_PROXY=http://127.0.0.1:8118;export NO_PROXY=127.0.0.1,localhost,.example.com
— ポートは実際のHTTPリスナーのもの、NO_PROXY は skip-proxy のリストから作られるので、コマンドラインツールはシステムプロキシとまったく同じものを迂回します。テストしたいシェルに貼り付けてください。効くのはそのシェルだけです。
確認: アプリを操作するにつれ、メインウィンドウの トラフィック タブに行が増えていきます。(メインウィンドウはメニューの ダッシュボードを開く...(⌘,)です。今のインターフェース以前から設定があったMacでは、先に同じメニューで 新しいメインUIを使用 をオンにしてください。)1 行も出ないならトラフィックはChuteに届いていません — 復号の問題を探す前に、このステップに戻ってください。
2. トラフィックタブを読む
トラフィック は稼働中の接続を検索フィールドと件数(N active)付きで一覧します。表示する列 ▾ でレイアウトを切り替えます:
- 2 行表示(既定) — 1 接続 2 行。眺めるのに向いています。
- ワイドテーブル — 1 接続 1 行で全列を並べます: ホスト、プロセス、ルール、ポリシー、プロトコル、アップロード、ダウンロード、合計、状態。ヘッダーのクリックで並べ替えできます。
- アプリごとにグループ化 — 接続を開いたアプリごとにまとめ、名前とアイコンを表示します。「このプロセスは誰と話しているのか」に最速で答えます。
行を右クリックすると 詳細を表示、ホストをコピー、詳細をコピー、ログを絞り込む(ログ タブにこの接続で絞り込んだ状態で移動)、接続を閉じる が出ます。
詳細を表示 はウィンドウを開き、その接続のホスト、プロセス、プロトコル、リモート、ルール、ポリシー、書き換え、アップロード、ダウンロード、状態を表示します — どう経路が決まったかはすべてここにあります。
トラフィックタブはリクエストとレスポンスのボディを表示しません。それが詳細ウィンドウの リクエストと履歴 ボタンの役目で、押すとWebコンソールが開きます。開くのはコンソールのホームページで、その接続そのものではありません。
3. リクエストを送らずにルールを試す
ルール タブに ルールをテスト... ボタンがあります。URLかホスト名だけを入力して テスト を押すと、Chuteが解釈したホストとポート、DNSの結果、一致したルール、そのルールが選んだポリシー、そして注記を返します。
「なぜこれが直接接続になったのか」「2 つのルールのどちらが勝つのか」が問いのときに使ってください。動作中のルールセットを参照するので、編集した設定が実際に読み込まれているものかどうかも同時に分かります。答えが古そうなら設定を再読み込み(⌘R)してください。同じ問いをAPIで行うなら POST /api/rules/match です。
4. 記録と復号をオンにする
どちらもメニューにあり、どちらも動作中のエンジンに作用します:
- トラフィックキャプチャ(⌘B)— リクエストとレスポンスのボディを保持します。つまり
replica設定です。既定はオフで、オンにするまで何にもボディはありません。 - MitMを有効にする(⌘M)—
[MITM]のhostnameリストにあるホストの復号をオンにします。
どちらも設定ファイルに書き戻されます — replica と、[MITM] の enable です — そのため再読み込みや再起動の後も残ります。リモートの設定には書き込むローカルファイルが無いので、スイッチは実行中のエンジンを切り替えるだけで、アプリは 設定を保存できませんでした と表示します。コンソール、Dashboard、APIは同じ2つの設定を切り替えますが、ファイルには書きません。その場合 設定を再読み込み(⌘R)は、ファイル側が変わらない限り切り替えた状態を保ちます — replica はファイル上の自身の値が変わったとき、[MITM] enable は [MITM] セクションのいずれかのキーが変わったとき、またはホストリストがコンソールやAPIから編集されたときに適用し直されます — そして再起動は必ずファイルの内容から始まります。
CAはmacOSでは 1 ステップです。設定ウィンドウでMitMを開きます:
- 新しい証明書を生成(または PKCS#12 ファイルから証明書をインポート)。
- 証明書をシステムにインストール — macOSが管理者パスワードを求め、信頼されたルート証明書としてシステムキーチェーンに追加します。iOSのような別途の「信頼」手順はありません。
- 証明書をエクスポート で
.pemを書き出せます。同じCAをスマートフォンやApple TV、コンテナに入れる手段はこれです。
5. 1 つのプロセスに絞る
Appleのプラットフォームの中では、Chuteがどのアプリケーションが接続を開いたかを知っているのはmacOSで、ルールもそれを使えます(Chute Androidもパッケージ名で知っています):
[Rule]
PROCESS-NAME,curl,DIRECT
PROCESS-NAME,MyApp,MyProxy
PROCESS-NAME、PROCESS-PATH、PROCESS-NAME-REGEX はプロセスルールを参照してください。トラフィックタブの アプリごとにグループ化 と組み合わせれば、1 つのアプリだけをプロキシ — あるいはモック — に通し、マシンの他はいつも通りにできます。
6. Macでしか成り立たないこと
- モックレスポンスルールの
data=のファイルパス。 ファイルはChuteを動かしているデバイスがリクエスト時に読みます。Macではそれが編集しているマシン自身なので実パスが使え、ファイルを直せば次のレスポンスから変わります(再読み込み不要)。スマートフォンでは同じパスに意味がありません — iPhoneのガイドがbase64=を使うのはそのためです。 - ディスク上のファイル。 ログのシャードと接続データベースは
~/Chute/Share/<run id>/に、実行マーカーはその隣の~/Chute/Share/にあります。ファイルの場所(macOS)を参照。共有シートを経由せず、そのままバグ報告に添付できます。取得したボディもDUMP/の下にありますが、エンジンが動いている間だけです: 停止すると削除されるので、必要なものは先に書き出してください — コンソールの HARをエクスポート、またはDashboardの bin として書き出す で。 - 他のデバイスへの提供。
allow-wifi-accessをオンにすると、ネットワーク上の他のマシンがプロキシ設定をこのMacに向けられます。そのトラフィックは同じビューに現れ、Dashboardのクライアントサイドバーでは リモート に入ります — Chuteが動いていないデバイス、WindowsのノートPCやスマートテレビを調べる方法がこれです。
7. トラフィックタブで足りないとき
- Webコンソール — メニューバー → Webコンソールを開く。ボディ、HARの書き出し、どの書き換えが実際に効いたかを示すルールページ、診断プローブがあります。
[General]のexternal-http-controllerが必要です。 - Chute Dashboard — 別の無料アプリ。このMacに対しては設定はまったく要りません。メニューの Chute Dashboardを開く...(⌘D)で、このMacに接続した状態で開きます。新規ダッシュボード ウィンドウで ローカルマシンに接続 を選んでも同じです。この経路はトンネルが常に開いているローカルソケットでエンジンに届くので、設定すべきポートもパスワードもありません。リモートの経路が要るのは、Dashboardを別のMacで動かすときだけです —
[General]にexternal-controller-access = <password>@0.0.0.0:6170を書き、リモートマシンに接続 でこのMacのアドレスと、そのポートとパスワードを指定します。どちらの経路であれ、MitMツールのパネルと右クリックのHAR / curl 書き出しのために入れる価値があります。 - ログタブ — まず
loglevel = verboseでレベルを上げ、終わったら戻してください。接続行の ログを絞り込む はタブをその接続だけに絞ります。
本ページは英語版からの翻訳です。内容に相違がある場合は、英語版が優先されます。