本文へスキップ
GitHub

v0.1.0 · MIT ライセンス

すべてのリクエストを見る自分のマシンの上で

Reqeek は HTTP/HTTPS プロキシをローカルで起動し、通過するすべてを記録します —— メソッド、ステータス、所要時間、TTFB、ボディ全体まで。カーネル拡張もルーターの設定変更も不要で、トラフィックがこのマシンの外に出ることはありません。

macOS と Windows に対応

ホスト / パス / メソッド / ステータス
CA 証明書
名前ステータス時間
GET/200312 ms
GET/assets/github-css-8f2a1c.css20088 ms
GET/manifest.json20019 ms
GET/favicon.svg20024 ms
GET/assets/github-js-4d9e77.js200165 ms
GET/assets/chunk-vendor-1b83.js20096 ms
GET/images/modules/octocat.png200143 ms
GET/assets/mona-sans-latin.woff220061 ms
GET/_graphql/GetHomepageData200208 ms
POST/_graphql/CountRepos200331 ms
記録中22 / 40 件のリクエスト

ホストのグループをクリックするとリクエストが展開されます。上部の種類タブを切り替えると一覧を絞り込めます。

残しておく価値のあるものは、すべて

平文の HTTP から復号した HTTPS まで、リクエストヘッダからレスポンスボディまで —— Reqeek は 1 件のリクエストの全体像を並べて見せます。

  • HTTP キャプチャ

    平文の HTTP リクエストを転送し、メソッド、URL、ステータスコード、所要時間、TTFB、上下両方向の転送バイト数を記録します。

  • HTTPS の復号

    CONNECT リクエストごとにオンデマンドでサイト証明書を発行するので、リクエストヘッダ、レスポンスヘッダ、ボディ全体まで読めます。ハンドシェイクに失敗したホストは透過トンネルにフォールバックします。

  • WebSocket

    平文の ws と復号した wss を扱います。アップグレードが成功した後はバイト列をそのまま転送し、両方向のトラフィックを計測します。

  • リクエスト詳細

    Headers、Payload、Preview、Response、Timing の 5 つのペイン。JSON と XML は折りたたみ可能なツリーで表示し、画像と HTML はその場でプレビューします。

  • 送信元アプリの特定

    クライアントの送信元ポートから、リクエストを出したローカルアプリを特定します。サイドバーがアプリごとのリクエスト数を集計するので、クリックすればそのアプリの通信だけを表示できます。

  • フィルタと検索

    リソースの種類やキーワードで絞り込み、検索の反転、エラーのみ、トンネルを隠すにも対応。一覧はホストごとにまとまり、各列で並べ替えできます。

  • システムプロキシの管理

    記録を開始するとシステムプロキシを設定し、停止または終了時に元に戻します。変更前の設定は先にディスクへスナップショットされるので、ポートのバインドに失敗してもネットワーク設定には触れません。

  • 証明書の管理

    root CA の生成、インストールと信頼、信頼状態の確認、削除まで、すべてアプリ内で完結します。Keychain Access や certmgr を探し回る必要はありません。

仕組み

カーネル拡張もネットワークドライバもなく、トラフィックがマシンの外に出ることもありません。Reqeek が使うのは最も素朴な方法、ローカルで動くプロキシです。

  1. 1

    root 証明書が信頼されているかを確認する

    「記録を開始」をクリックすると、Reqeek はまず root CA が信頼されているかを確認します。信頼されていなければキャプチャを拒否し、UI は証明書セットアップ画面のまま止まります。何も取得できないウィンドウを眺めさせるより、先にそう伝えたほうがいいからです。

  2. 2

    プロキシを起動してから、システムプロキシを引き継ぐ

    プロキシは 127.0.0.1 で起動します。システムプロキシの設定を書き換えるのはポートのバインドに成功した後なので、ポートの競合でネットワークが切れることはありません。

  3. 3

    転送して記録する

    平文 HTTP はそのまま転送して記録します。HTTPS は CONNECT 経由で入り、デフォルトでは 443 番ポートのみ復号します。Apple のプッシュと OCSP のホストは最初から除外され、トンネルとして記録されます —— ホスト、バイト数、所要時間だけです。

  4. 4

    停止時に元へ戻す

    停止時はプロキシを終了する前にシステムプロキシを元に戻します。アプリが予期せず終了した場合も、次回起動時に先に書き出しておいたスナップショットからシステムプロキシを復元します。

よく訊かれるデフォルト値

ここにある数字はすべてソースから読み取ったもので、推測ではありません。

リッスンアドレス
127.0.0.1
ローカル接続のみ —— 同じネットワーク上の他の機器からは届きません
プロキシポート
8989
設定で 1024 から 65535 の範囲で変更できます
デフォルトで復号する範囲
443 番ポート
それ以外はすべてトンネルとして流れます
除外ホスト
push.apple.com など
push.services.apple.com とすべての OCSP ホストを含み、復号は行いません
1 件あたりのボディ保持上限
5 MiB
それを超える分はバイト数だけを保持します
詳細のメモリ予算
64 MiB
レコード単位で LRU により破棄 —— 取得した内容がディスクに書かれることはありません
root CA の有効期間
10 年
リーフ証明書は 199 日で、512 ホスト分をキャッシュします

対応プラットフォーム

macOS と Windows は完全に対応しています。Linux はまだキャプチャできません。

機能macOSWindowsLinux
システムプロキシを自動で設定利用可利用可利用不可
root 証明書をインストールして信頼利用可利用可利用不可
記録を開始利用可利用可利用不可
送信元アプリで絞り込み利用可利用可利用不可

Linux にはパッケージング設定しかなく、システムプロキシと証明書信頼のドライバがありません。信頼状態は常に未対応として報告され、キャプチャの開始には信頼済みの証明書が必要なため、起動は拒否されます。CI も Linux インストーラをビルドしません。

Windows のシステムプロキシと証明書信頼のドライバは公開ドキュメントに沿って実装したもので、実機での検証はまだ不十分です。問題があれば issue を立ててください。

キーボードショートカット

開始もクリアも検索も、キーボードから手を離さずに。

  • 記録の開始 / 停止Cmd/Ctrl+R
  • 記録をクリアCmd/Ctrl+K
  • リクエストを検索Cmd/Ctrl+F
  • 設定を開くCmd/Ctrl+,
  • リクエスト一覧を上下に移動↑+↓

セキュリティとプライバシー

キャプチャツールはあなたの通信のすべてを見られるのだから、まず信頼に値するものでなければなりません。

  • ローカル接続のみ

    プロキシは 127.0.0.1 にバインドし、LAN やインターネットからの接続は一切受け付けません。

  • 秘密鍵はここに置いたまま

    root CA の証明書と鍵はアプリのデータディレクトリにあり、ディレクトリは 0700、鍵ファイルは 0600 です。この鍵を持つ者は任意の HTTPS サイトを偽造できます。ca.key は決して共有しないでください。

  • ディスクには何も書きません

    リクエストの詳細はメモリ上にしかなく、64 MiB の予算に対して LRU で破棄されます。終了しても何も残りません。

  • アプリ自身が外部に送信しません

    Reqeek はどこにもデータを送りません。アカウントも、アクセス解析も、テレメトリもありません。

  • 同時に動くのは 1 インスタンスだけ

    単一インスタンスロックにより、2 つのコピーが互いのシステムプロキシ設定を復元し合うことを防ぎます。

Reqeek をダウンロード

現在のバージョンは v0.1.0。お使いのマシンに合ったインストーラを選んでください。

ダウンロードは GitHub Releases を指しています。速度が出ない場合は中国本土向けのリレーも利用できます。

すべてのリリースを見る

初回起動時に OS が表示するもの

macOS
macOS 版は ad-hoc 署名で、Apple の公証は受けていません。初回起動は Gatekeeper にブロックされるので、「システム設定 → プライバシーとセキュリティ」で「このまま開く」を選ぶか、Finder でアプリを右クリックして「開く」を選んでください。
Windows
Windows 版にはコード署名証明書がないため、SmartScreen が「Windows によって PC が保護されました」と警告することがあります。「詳細情報」をクリックし、続いて「実行」を選んでください。

よくある質問

なぜ root 証明書の信頼が必要なのですか?

HTTPS の復号は、定義上そのまま中間者攻撃です。Reqeek はあなたのマシン上で root CA を生成し、それを使ってアクセス先のホストごとに一時証明書を発行します。ブラウザがその証明書を受け入れるのは、システムがこの root CA を信頼している場合だけです。信頼がなければ、HTTPS の通信はトンネルとしてしか記録できません —— ホスト、バイト数、所要時間だけで、中身は見えません。

一部のアプリが復号できないのは不具合ですか?

いいえ。証明書ピンニングを使うアプリは意図的に復号を拒否します。それが本来のセキュリティ設計です。ハンドシェイクに失敗すると、Reqeek はそのホストを除外リストに加えて再試行をやめ、トンネルとして記録します。

macOS で「開発元を確認できません」あるいは「壊れているため開けません」と表示されます。

現在のビルドは ad-hoc 署名で、Apple の公証は受けていません。初回起動時は「システム設定 → プライバシーとセキュリティ」でブロックされた通知を探し、「このまま開く」を選んでください。あるいは Finder でアプリを右クリックして「開く」を選び、ダイアログで確認します。

Linux ではなぜキャプチャできないのですか?

Linux には electron-builder のパッケージング設定しかなく、システムプロキシと証明書信頼のドライバがありません。信頼状態は常に未対応として報告され、キャプチャの開始には信頼済みの証明書が必要なので、起動はそのまま拒否されます。CI も Linux インストーラをビルド・アップロードしません。

ポート 8989 がすでに使われています。どうすればいいですか?

設定でポートを変更してください。1024 から 65535 まで指定できます。Reqeek は新しいポートのバインドを確認してからシステムプロキシの設定に触れるので、競合でネットワークが壊れることはありません。

終了したあと、システムプロキシの設定は残りませんか?

キャプチャの停止または通常の終了では自動的に元に戻ります。プロセスを強制終了した場合も、次回起動時に先に書き出しておいたスナップショットからシステムプロキシを復元します。「システム設定 → ネットワーク → プロキシ」で自分でオフにすることもできます。