Chute Dashboard
Chute Dashboard は無料の macOS アプリで、動作中の Chute — Wi-Fi または USB ケーブル経由の Chute iOS、あるいは同じ Mac 上の Chute Mac — に接続し、そのインスタンスが何をしているかを表示します:すべての接続とそれを決めたルールとポリシー、HTTPS 復号の対象ホストでは復号済みのリクエストとレスポンス、DNS の応答、UDP セッション。見ながらトラフィックを変えることもできます:MitM ホストリストと、書き換え・Mock の各ルールファミリーをその場で編集できます。
これは Web コンソールではありません。コンソールはカーネル自身が提供しブラウザーで開きますが、Dashboard は独立したアプリで、カーネルのバイナリ制御チャネルを通じて対話します。そのためデバイス側に必要なのは
external-http-controllerではなくexternal-controller-accessです。両者は重なる部分もあれば、それぞれにしかないものもあります — Dashboard が届かないものを参照してください。
Dashboard のインターフェースは本マニュアルと同じ言語にローカライズされています(アラビア語を除く。アラビア語のシステムでは英語で表示されます)。
Dashboard の接続を許可する
デバイスが許可するまで、何も待ち受けません。
Chute iOS — 設定エディターで 外部コントローラー → 外部コントローラーアクセス を開きます:
- Chuteダッシュボード/Chute CLIの接続を許可 をオンにします。
- ポート と パスワード を設定します。パスワードは空にできず、自分で決めたものでなければなりません。ネットワークから到達できるリスナーは、空のパスワードや既定のパスワードでは起動を拒否します。
- 必要でない限り Wi-Fiからのアクセスを許可 はオフのままにします。オフが既定で、リスナーはスマートフォン自身の中にとどまります — USB ケーブルなら届きますが、Wi-Fi 上の他のデバイスからは届きません。オンにすると、そのネットワーク上でパスワードを知っている誰もが、この実行が見たすべてを読めるようになります。
- 保存して、トンネルを開始(または再起動)します。コントロールパネルに 外部アクセスポート:
<ポート>が表示されます — この行がリスナーが立ち上がった確認です。
Chute Mac — 同じ 3 つの値は [General] にあります:
[General]
external-controller-access = password@127.0.0.1:6170
127.0.0.1 は今いる Mac だけに限定します。同じ Mac で動く Dashboard が必要とするのはまさにこれです。LAN のアドレスや 0.0.0.0 にすると他のマシンにも開きます。設定ウィンドウの General セクションに同じキーのフィールドがあります。
接続する
Dashboard は Chute 新規ダッシュボード ウィンドウで開きます。接続ごとに 1 つのウィンドウを持つので、複数のデバイスを同時に開けます。入り方は 2 つ:
| フィールド | どんなとき | |
|---|---|---|
| リモート | ホスト、ポート、パスワード | デバイスの Wi-Fi アドレス(iPhone: 設定 → Wi-Fi → ⓘ)、またはこの Mac の Chute Mac なら 127.0.0.1。スマートフォン側で Wi-Fiからのアクセスを許可 がオンである必要があります。 |
| USB | ポート、パスワード | iPhone がケーブルでこの Mac に接続され、この Mac を信頼していること。設定したのと同じポートを入力します — ケーブルのチャネルは Dashboard が自分で見つけます。Wi-Fiからのアクセスを許可 がオフでも動作し、スマートフォンが Wi-Fi に接続している必要すらないので、モバイル回線のトラフィックも見えます。 |
接続したことのあるマシンは マシン: に記憶され、次回はそこから選べます。
パスワードが違うとウィンドウに パスワードが一致しません と表示されます。デバイスがいなくなると — トンネルが止まった、ケーブルが抜かれた、スマートフォンがネットワークを変えた — Dashboard ウィンドウは 接続が切断されました と報告し 再接続 を提示します。自動再接続はありません。
ウィンドウ
ツールバーで 5 つのビュー — アクティブ、最近、DNS、UDP、MitM — を切り替え、フィルター でフィルターバーの表示・非表示を切り替えます。左下のパネルはアップロードとダウンロードのリアルタイム速度で、クリックするとグラフが展開します。
アクティブ と 最近 のビューでは、ツールバーに 動作中のカーネル に作用する 2 つのスイッチもあり、各アプリのスイッチとまったく同じ働きをします:
- トラフィックを記録 → トラフィック記録を無効化: リクエストとレスポンスのボディの取得(
replica設定)をオンにします。オフでも行は経路情報付きで表示されますが、データのタブは空のままです。 - MitM を有効化(N ルール) → MitM を無効化(N ルール): MitM ホストリストにある N 個のホストの HTTPS 復号をオンにします。デバイスに信頼された CA と少なくとも 1 つのホストが無いうちは、このスイッチは実質的に何もしません — HTTPS 復号のページを参照してください。
どちらのスイッチも設定ファイルは書き換えません。再起動すればファイルの内容に戻ります。
サイドバーは接続をクライアントごとにまとめます: すべてのクライアント、次にデバイス自身のクライアントの ローカル、この Chute をプロキシとして使う他のマシンの リモート。1 つを選ぶと、すべてのリストがそれに絞られます。デバイスが Chute Mac のときは、ローカルのクライアントは名前とアイコン付きのアプリケーションで、コンテキストメニューに Finder に表示 があります。
アクティブと最近
アクティブ はいま開いている接続、最近 はデバイスの履歴で、新しい順に、この実行の記録から読み戻されます。両方が同じ列を共有します:
| 列 | |
|---|---|
| ID | カーネルの接続番号 — コンソールや各アプリが表示するのと同じ番号 |
| 日付、継続時間 | いつ始まったか、どれだけ続いているか/続いたか |
| クライアント | プロセス(Chute Mac)またはローカルアドレス |
| メソッド、サーバー、ステータス | 取得したリクエストから解析したリクエスト行と応答 |
| ポリシー | ルールが選んだポリシー |
| アップロード、ダウンロード | 各方向のバイト数 |
| フラグ | Chute がその接続に何をしたか — 下の凡例を参照 |
フラグ 列は、書いたルールが適用されているかを最も手早く知る方法です:
| フラグ | 意味 |
|---|---|
M |
復号済み(MitM 傍受) |
H |
ヘッダーが変更された |
B |
ボディが変更された |
R |
書き換えルールが適用された |
K |
サーバーではなく Map Local の Mock が応答した |
最近は最大 5,000 行を保持します。リスト末尾の さらに読み込む がデバイスから次のページを取得し、リスト自体は数秒ごとに自動更新されます。アクティブのリストが 1 つの制御パケットに収まらないほど長いときは、表の下にカーネルが切り詰めた旨の注記が出ます — その行はデバイス上に存在し、閉じれば最近に現れます。
行を右クリックすると curl コマンドをコピー、選択項目を HAR として書き出す… / CSV として書き出す…、すべてを HAR として書き出す… / CSV として書き出す… が使えます。アクティブな行にはさらに 接続を切断 があり、デバイス上でその接続を閉じます。
注意: 1 行は 接続 であって、リクエストではありません。複数のリクエストを運んだ keep-alive 接続も 1 行のままで、取得されたデータにはそれらのメッセージが連続して入っています。表示されるヘッダーはそのうちの 1 つのリクエストのものです。そのため、ブラウザーでページを 1 つ開いても、ページのリソース数より少ない行しか生まれません。
フィルターバー
フィルターバーが絞るのは 表示 です。デバイスが何を記録するかは変えません — それにはデバイス側の [Replica] を使います。
| コントロール | 選択肢 |
|---|---|
| ホスト/URL でフィルター… | ホストと URL に対するテキスト一致 |
| メソッド | GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、CONNECT |
| ステータス | 1xx – 5xx |
| トラフィック | アクティブ、完了、中断 |
| 種類 | JSON、HTML、XML、画像、テキスト、バイナリ — レスポンスのコンテンツタイプから |
| 所要時間 | < 100ms、100ms–1s、1s–5s、> 5s |
| サイズ | < 1 KB、1–100 KB、100 KB–1 MB、> 1 MB |
| MitM のみ | 復号された接続のみ |
| 変更済み | ルールが変更した接続 — H、B、R、K のいずれか |
フィルターをクリア で全件に戻ります。
接続の詳細
行を開くと詳細ウィンドウになります。タブは左から:
一般 — リストにあるものを、余裕をもって並べたもの: リクエスト行とステータスコード、アウトバウンドモード、ポリシー、一致したルール、転送量とピーク速度、ローカルとリモートのアドレス、開始時間、SSL/MitM の状態(傍受済み、ヘッダー変更済み、ボディ変更済み、モック済み)、そして 適用されたルール — この接続を変更した書き換え・Mock ルールのすべてを、ルール自身の文言で引用したもの。ここに現れないルールはこの接続に触れていません。
タイミング — 接続のセットアップにかかった時間の内訳を、カーネルが測ったまま:
| 行 | 計測の始点 → 終点 |
|---|---|
| プロキシ準備時間 | クライアントの接続が到着 → Chute が処理できる状態になる |
| DNS 解決 | → 名前が解決される(ルールがアドレスを必要としないときはゼロ) |
| ルール判定時間 | → ルールテーブルが決定する |
| リモート準備時間 | → 選ばれたアウトバウンドが接続され準備完了になる |
| アクティブ | それ以降、接続が閉じるまでのすべて |
遅いリクエストはたいていこの行のどれか 1 つだけが遅く、どの行かがどこを見るべきかを教えてくれます: DNS なら DNS セクション、リモート準備ならポリシーやその先のサーバー、アクティブならアプリケーション自身です。
リクエストヘッダー / レスポンスヘッダー — ヘッダーを表形式で。リクエスト側は クエリパラメータ と Cookie、レスポンス側は Cookie を分けて表示します。ルールが変更したヘッダーは強調表示されます。選択項目をコピー は選択した行をコピーします。
リクエストデータ / レスポンスデータ — 取得したボディを 16進数、テキスト、JSON(検索付きの展開できるツリー)、画像(フィット / 実際のサイズ)として表示します。multipart のボディはパートごとに分割されます。bin として書き出す は生のバイト列を保存します。データがあるのは、その接続の実行時に記録がオンで、かつホストが [Replica] のフィルターを通過した場合だけです。
注意: ボディは取得されたままの姿で表示されます。圧縮されたレスポンス —
Content-Encoding: gzip— はここでは展開されないので、そのテキストと JSON の表示はノイズになります。16進数の表示と bin として書き出す でバイト列を取り出し、別の場所で展開してください。デバイスは 2 MiB を超えるボディの引き渡しを拒否し、16進数の表示は先頭 1 MiB を示します。
DNS と UDP
DNS はデバイスのリゾルバキャッシュです: 各ドメインとそれが解決されたアドレス、最初に答えたサーバー(Chute は設定されたすべてのサーバーに同時に問い合わせます — DNS を参照)、TTL、レコードタイプ。右クリックで ドメインをコピー、IP をコピー、DNS サーバーをコピー ができます。
UDP は UDP セッション — ホスト、サーバー、ポリシー、状態 — を一覧します。UDP にボディはありません。
MitM ツール
MitM ビューはデバイス上の 5 つのルールファミリーを 5 つのパネルで管理します: MitM ルール、ヘッダー書き換え、ボディ書き換え、Map Local、Map Remote。すべてに共通すること:
- リストは 動作中のカーネル が持つルールのコピーで、出発点は設定ファイルが宣言した内容です。
- ルールを追加するとデバイスへ送られ、デバイスは設定行を解析するのと同じように解析します。解析できない行は保存されず、エラーとして拒否されます。
- 変更は動作中のカーネルにだけ存在します。設定ファイルには 書き戻されず、リロードや再起動でファイルの内容に戻ります。パネルで効くルールを見つけたら、それを設定に書き込んでください。
- ルールが適用されているかどうかは、リストの フラグ 列(
R、K)と詳細ウィンドウの 適用されたルール に現れます。
MitM ルール — 1 ルールにつき 1 つのホストパターン、host[:port][/path]、除外は - 接頭辞: *.google.com、api.example.com:8443、api.example.com/v2/*、-*.apple.com。HTTPS 復号ページの hostname キーと同じ文法です。ツールバーの MitM スイッチの数字はこのリストの長さです。
ヘッダー書き換え — フォーム: URL 正規表現、リクエスト または レスポンス、追加 / 置換 / 削除、ヘッダー名、ヘッダー値。設定行は Dashboard が組み立てます。文法はヘッダー書き換えのページにあります。
ボディ書き換え — 設定行を 1 行、ファイルに書くとおりに入力します: url-regex type pattern replacement。type は response、request、jsonpath-response、jsonpath-request のいずれかです。ボディ書き換えを参照してください。
Map Local — URL 正規表現、ファイルパス(参照…)、任意の レスポンスヘッダー(1 行に 1 つ、Name: Value)。
注意: ファイルパスは Chute を動かしているデバイス がリクエスト時に読みます。Dashboard が同じマシンの Chute Mac に接続しているなら Mac 上のパスに意味がありますが、iPhone に接続しているなら意味がありません — スマートフォンに
/Users/…はありません。リモートのデバイスには、ルールのbase64=形式で内容をインラインにし(モックレスポンスを参照)、デバイス自身のエディターか Web コンソールから追加するか、ファイルを URL で配信して Map Remote を使ってください。
Map Remote — URL 正規表現、ターゲット、種類: header はリクエストをその場で書き換え(Surge の Map Remote)、302 と 307 はクライアントをリダイレクトし、reject、reject-200、reject-img、reject-dict はサーバーに接続せずに応答します。URL書き換えを参照してください。
書き出し
- HAR — リストの右クリックから: 選択した行またはすべてを HAR 1.2 ファイルとして。ブラウザーの開発者ツール(Network → インポート)、Charles、Proxyman で開けます。1 行につき 1 エントリで、記録がオンだったときはボディも含まれます。
- CSV — リストの列を、表計算ソフト向けに。
- curl コマンドをコピー — そのリクエストをヘッダー付きで Mac から再送する
curl呼び出し。 - bin として書き出す — 取得されたままのボディ 1 つ。
Dashboard の HAR は取得済みのデータから組み立てられます。カーネル自身も HAR を作れます — エントリごとの _kl オブジェクトに一致したルール、ポリシー、適用された書き換えを収め、送受信のタイミングはキャプチャから取ったもので — コンソールの Export HAR(HAR をエクスポート) か GET /api/connections/export?format=har からです。
Dashboard が届かないもの
Dashboard はカーネルのバイナリ制御チャネルで話し、カーネルにできることの一部は HTTP 制御 API にしかありません。以下は Web コンソールか API を使ってください:
- 診断バンドル、健全性、拒否カウンター、イベント
- コンソールの Rules ページにあるルールごとの適用回数と、それが答える このルールは一度でも発動したか
- 上述のカーネル自身の HAR
- ログ
頼りにする前に知っておきたいことがもう 2 つ:
- Chute Android はバイナリチャネルを提供しないので、Dashboard は接続できません。Android 自身のリモートダッシュボードと Web コンソールが同じ範囲をカバーします。
- iPhone と Apple TV では、HTTPS 復号とボディの取得はライセンスが必要な機能です。ライセンスが無くても Dashboard は接続でき、すべての接続をルールとポリシー付きで表示しますが、HTTPS の行は不透明な
CONNECTトンネルのまま、データのタブは空のまま、MitM スイッチは効きません。ライセンスと有効化を参照してください。
本ページは英語版からの翻訳です。内容に相違がある場合は、英語版が優先されます。