v0.1.0 · MIT ライセンス
すべてのリクエストを見る自分のマシンの上で
Reqeek は HTTP/HTTPS プロキシをローカルで起動し、通過するすべてを記録します —— メソッド、ステータス、所要時間、TTFB、ボディ全体まで。カーネル拡張もルーターの設定変更も不要で、トラフィックがこのマシンの外に出ることはありません。
macOS と Windows に対応
ホストのグループをクリックするとリクエストが展開されます。上部の種類タブを切り替えると一覧を絞り込めます。
残しておく価値のあるものは、すべて
平文の 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
root 証明書が信頼されているかを確認する
「記録を開始」をクリックすると、Reqeek はまず root CA が信頼されているかを確認します。信頼されていなければキャプチャを拒否し、UI は証明書セットアップ画面のまま止まります。何も取得できないウィンドウを眺めさせるより、先にそう伝えたほうがいいからです。
- 2
プロキシを起動してから、システムプロキシを引き継ぐ
プロキシは 127.0.0.1 で起動します。システムプロキシの設定を書き換えるのはポートのバインドに成功した後なので、ポートの競合でネットワークが切れることはありません。
- 3
転送して記録する
平文 HTTP はそのまま転送して記録します。HTTPS は CONNECT 経由で入り、デフォルトでは 443 番ポートのみ復号します。Apple のプッシュと OCSP のホストは最初から除外され、トンネルとして記録されます —— ホスト、バイト数、所要時間だけです。
- 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 はまだキャプチャできません。
| 機能 | macOS | Windows | Linux |
|---|---|---|---|
| システムプロキシを自動で設定 | 利用可 | 利用可 | 利用不可 |
| 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 は新しいポートのバインドを確認してからシステムプロキシの設定に触れるので、競合でネットワークが壊れることはありません。
終了したあと、システムプロキシの設定は残りませんか?
キャプチャの停止または通常の終了では自動的に元に戻ります。プロセスを強制終了した場合も、次回起動時に先に書き出しておいたスナップショットからシステムプロキシを復元します。「システム設定 → ネットワーク → プロキシ」で自分でオフにすることもできます。