
リアルタイムでリクエストをキャプチャ、検査、変更するためのTUIを備えたターミナルベースのHTTP傍受プロキシ。さらに、リクエストを再送信して調整するためのRepeaterも搭載。
最小限のターミナルベース HTTP/HTTPS 傍受プロキシ。
https://github.com/user-attachments/assets/94f9c9ae-5842-4b19-9f5b-84dedb9430e6
機能 · インストール · HTTPS サポート · 使い方 · 仕組み
Roxy は Rust で書かれた、ターミナルユーザーインターフェース (TUI) を備えた HTTP および HTTPS 用の軽量な傍受プロキシです。 リクエストがサーバーに到達する前に、ターミナル内からリアルタイムでキャプチャ、検査、変更できます。 日常的なトラフィック解析のための、Burp Suite に代わる最小限のターミナルネイティブなツールと考えてください。
CONNECT を介した完全な MITM サポート。証明書は自動的に生成されます。$EDITOR を使って傍受したリクエストをその場で変更できます。--host と --port でリッスンアドレスを設定し、どのホストを傍受するか、またはパススルーするかを決定できます。ソースからビルドするには以下が必要です:
| 要件 | 備考 |
|---|---|
| Rust 1.85 以降 | rustc --version で確認してください。 |
| C コンパイラ | gcc または clang。 |
$EDITOR | リクエスト編集機能にのみ必要です。 |
git clone https://github.com/vid4l-07/Roxy.git
cd Roxy
cargo build --release
バイナリは target/release/roxy に生成されます。
cargo install --git https://github.com/vid4l-07/Roxy.git
バイナリは ~/.cargo/bin/roxy に生成されます。
[!note] HTTPS パススルー が有効な場合、HTTPS サポートは不要です。
| 内容 | 場所 | 備考 |
|---|---|---|
| CA 証明書と鍵 | ~/.config/roxy/ca.crt, ~/.config/roxy/ca.key | 最初の HTTPS リクエスト傍受時に遅延生成されます。 |
| ホストごとのリーフ証明書 | /tmp/roxy_certs/<host>.crt, /tmp/roxy_certs/<host>.key | 必要に応じて発行されキャッシュされます。新しい CA が生成されるたびにキャッシュは消去されます。 |
Roxy は Roxy CA という名前の自己署名 CA を生成します。
[!Warning] CA がクライアントに信頼されるまで、すべての HTTPS リクエストは検証に失敗します。
~/.config/roxyca.crt をブラウザまたはシステムにインストールしてください。
組み込みの Web ページ http://roxy (または http://<host>:<port>) からダウンロードすることもできます。
Firefox / Chrome:
Settings → Privacy & Security → Certificates → View Certificates。~/.config/roxy/ca.crt を選択します。システム CA ストア curl などのツール用。
# Debian / Ubuntu
sudo cp ~/.config/roxy/ca.crt /usr/local/share/ca-certificates/roxy.crt
sudo update-ca-certificates
# Fedora / RHEL / Arch
sudo cp ~/.config/roxy/ca.crt /etc/pki/ca-trust/source/anchors/roxy.crt
sudo update-ca-trust extract
削除するには、ファイルを削除して対応するコマンドを再実行してください。
rm -rf ~/.config/roxy
Roxy は次回の HTTPS リクエスト時に新しい CA を生成し、キャッシュしていたすべてのリーフ証明書を削除します。 新しい CA を再度信頼する必要があります。古い CA をブラウザとシステムストアから削除することを忘れないでください。
| オプション | 説明 |
|---|---|
-h, --host <HOST> | リッスンホスト。デフォルトは 127.0.0.1。 |
-p, --port <PORT> | リッスンポート。デフォルトは 8080。 |
--passthrough | すべてのホストに対して、HTTPS を復号せずにトンネルします。 |
--passthrough-host <HOSTS> | --passthrough と同じですが、リストされたホストのみが対象です。 |
--intercept-https <HOSTS> | パススルーモードでもこれらのホストを傍受します。 |
--help | ヘルプメッセージを表示します。 |
# Pass every host through untouched except the one you want to inspect
roxy --passthrough --intercept-https <HOSTS>
| キー | 操作 |
|---|---|
q | 終了 |
Tab | Proxy 画面と Repeater 画面を切り替え |
? | 現在の画面のヘルプポップアップを開く |
| キー | 操作 |
|---|---|
i | 傍受の ON/OFF を切り替え |
Enter | 傍受したリクエストを転送 |
e | 外部エディタでリクエストを編集 |
u | 編集を元に戻す |
U | 編集をやり直す |
r | リクエストを Repeater に送信 |
↑/k | 上にスクロール |
↓/j | 下にスクロール |
| キー | 操作 |
|---|---|
Enter | 現在のリクエストを送信 |
e | 外部エディタでリクエストを編集 |
u | 編集を元に戻す |
U | 編集をやり直す |
r | 現在のタブの名前を変更 |
n | 次の Repeater タブ |
p | 前の Repeater タブ |
x | 現在のタブを閉じる |
z | フォーカスされたパネルのズームを切り替え |
↑/k | 上にスクロール |
↓/j | 下にスクロール |
←/h / →/l | Request パネルと Response パネル間のフォーカスを切り替え |
H | Request パネルの幅を縮小 |
L | Request パネルの幅を拡大 |
e を押すと、生のリクエストが一時ファイルに書き込まれ、$EDITOR で定義されたバイナリで開かれます。編集して保存し、終了してください。
変更されたリクエストは元のリクエストを置き換え、Content-Length は自動的に再計算されます。
127.0.0.1:8080 で接続を受け入れ (--host と --port で設定可能)、各接続を独自の非同期タスクで処理します。CONNECT リクエスト には 200 Connection Established で応答し、要求されたホスト用に発行された証明書で TLS をローカルで終端し、復号されたリクエストを通常の HTTP リクエストとして読み取ります。パススルーオプションに一致するホストは、代わりに TLS を終端せずに実際のサーバーにリレーされます。Host ヘッダーから宛先を解決します。tokio::mpsc チャネルを介して TUI にプッシュされ、接続はユーザーが転送するまで oneshot チャネルで待機します。リクエストはそのまま転送するか、先に編集するか、Repeater に送信できます。webpki-roots に対して検証された TLS)、リクエストを書き込み、生のレスポンスをクライアントにストリームバックします。Enter を押すたびに保存されたリクエストを再送し、リクエストがキャプチャされたプロトコルに基づいてトランスポートを選択し、レスポンスをリクエストと並べて表示します。TUI とプロキシは決して状態を直接共有しません。イベントチャネルを通じてのみ通信するため、リクエストが傍受されている間もインターフェースは応答性を保ちます。
コントリビューションはいつでも歓迎します。バグを見つけた場合や新機能の実装を手伝いたい場合は、以下を行えます:
Roxy は MIT License の下でリリースされています。© 2026 Hugo Vidal Martinez。