
プロトコル通信のリバースエンジニアリングのためのHTTPプロキシ解析
Go で書かれた軽量な HTTP/HTTPS インターセプトプロキシ兼トラフィック解析ツールです。キャプチャしたトラフィックをリアルタイムに検査・フィルタリング・色分け・注釈付けできる Web ベースの UI を備えています。


HTTP Breakout Proxy は、HTTP と HTTPS の両方に対応する MITM プロキシとして、またライブ可視化ツールとして機能します。
2 つのソフトウェアコンポーネント間のリクエストとレスポンスをキャプチャし、開発者に以下の機能を提供します:
このプロキシには、あらゆるモダンな Web ブラウザからアクセスできるフル機能の UI が組み込まれており、外部ツールなしで即座にリアルタイム分析が可能です。
captures.json(または指定したファイル)に保存されます。status:4 status:5 → HTTP エラーをハイライトurl:/api/ → API リクエストをハイライト/\.css$/ → URL に対する正規表現マッチmethod:GET、status:404、header:Content-Type=application/json)/login/)curl コマンド(ターミナル用にフォーマット済み)python requests コードスニペット(クリーンな JSON 表現)httpbreakout -l 127.0.0.1:8080
git clone https://github.com/jbsouthe/http-breakout-proxy.git
cd http-breakout-proxy
go build -o http-breakout-proxy
これにより、コンパイル済みプロキシと組み込み UI アセットを含む単一の実行ファイルが生成されます。
# デフォルトで実行(プロキシ + UI)
./http-breakout-proxy
デフォルトでは、バイナリはプロキシ用に 127.0.0.1:8080 にバインドされます(必要に応じて UI も同様。CLI フラグを参照)。ブラウザで UI を開いてキャプチャを検査します。
# プロキシを経由して HTTPS リクエストを送信(プロキシは 127.0.0.1:8080 で待ち受け)
curl -x http://127.0.0.1:8080 https://example.com
キャプチャされたトラフィックが Web UI に表示されます。
./http-breakout-proxy -hを使用して、利用可能なフラグと使用方法の説明を一覧表示できます。
UI は調査ワークフロー向けに最適化されています。
METHOD URL [STATUS] ですが、カスタム名を割り当てることもできます。curl としてコピー、Python requests としてコピー、レスポンスボディのダウンロード、名前変更、削除。method:、status:、host:、url:、body:、req.body:、resp.body:、header:、req.header:、resp.header:。/pattern/flags(例: /bearer\\s+\\S+/i)。header:name=value。name または value は正規表現にできます。例:
method:POST status:2 host:api.example.com/token\\s*[:=]\\s*\\S+/ireq.header:authorization=/bearer/ibody:/\\"success\\"\\s*:\\s*true/i中間者攻撃モードが有効な場合:
-ca(デフォルト ./ca)に保存します。ca.pem など)をリクエストを発行するクライアント(またはシステム)のトラストストアに追加する必要があります。多くのプラットフォームでは管理者権限が必要です。セキュリティ上の注意: CA は管理された環境でのみインストールしてください。無関係な機密トラフィックを読み取るシステムでは、この CA を信頼しないでください。
永続化が有効な場合(-f または設定されたパスによる):
captures.json)。キャプチャされた項目は JSON にシリアライズされ、次のフィールドが含まれます(網羅的ではありません):
id — 一意のシーケンス識別子time — タイムスタンプ(ISO 8601)method、urlrequest_headers、response_headersrequest_body、response_body — 必要に応じて -max-body に切り詰めresponse_status、duration_msname — 任意のユーザーラベルnotes、deleted — SSE イベントと UI 状態を制御するメタデータcurl コマンドを生成します(ホップバイホップヘッダーは省略)。url、headers、任意の data を含む小さな requests スニペットを生成します。Content-Type から拡張子を推測します。設計上の考慮事項:
Host、Content-Length、Connection)が省略されます。GET /api/captures — キャプチャの一覧(JSON 配列)。DELETE /api/captures — すべてのキャプチャをクリア。GET /api/captures/{id} — 単一のキャプチャを取得。DELETE /api/captures/{id} — 特定のキャプチャを削除。PATCH /api/captures/{id} — キャプチャのメタデータを更新。ボディ例: { "name": "My label" }。GET /api/pause — { "paused": true|false } を返します。POST /api/pause — 一時停止状態を設定。ボディ例: { "paused": true }。GET /events — ライブキャプチャ通知と制御イベント用の Server-Sent Events (SSE) ストリーム。//go:embed ui/* と fs.Sub を使用して静的ファイルを配信します。これにより、単一のデプロイ可能な成果物が生成されます。Content-Encoding を確認し、表示前に gzip と deflate ボディの解凍を試みます。元のバイトはプロキシの透過性のために保持されます。io.LimitReader を使用して読み取られ、切り詰めを検出しメモリ使用量を保護します。推奨される配布モデル:
CGO_ENABLED=0、-trimpath、-ldflags "-s -w")。.tar.gz、Windows は .zip)し、README.md と LICENSE を含めます。goreleaser を使用して、クロスプラットフォームビルドとリリース成果物を自動化します。ビルドコマンドの例:
# Linux x86_64
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o dist/http-breakout-proxy-linux-amd64 .
# macOS (arm64)
GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o dist/http-breakout-proxy-darwin-arm64 .
[Unit]
Description=HTTP Breakout Proxy
After=network.target
[Service]
ExecStart=/opt/http-breakout-proxy/http-breakout-proxy -l 0.0.0.0:8080
Restart=on-failure
User=proxy
Group=proxy
[Install]
WantedBy=multi-user.target
~/Library/LaunchAgents に plist を作成し、launchctl でロードします。
キャプチャされたボディがバイナリの文字化けとして表示される
ボディが圧縮されています(例: gzip)。自動解凍を含むビルドを実行していることを確認してください。UI は利用可能な場合、解凍された JSON/テキストを表示します。
HTTPS トラフィックが表示されない / 接続エラー
クライアントが生成された CA を信頼していません。ca/ca.pem をクライアント/システムのトラストストアにインストールし、TLS インターセプト用に信頼済みとしてマークしてください。
キャプチャをクリアした後、UI に古い選択が表示される
cleared SSE イベントで selectedId をクリアするクライアントにアップグレードするか、GET /api/captures エンドポイントを呼び出して状態を更新してください。
DELETE /api/captures で 405
サーバーハンドラーが /api/captures の DELETE を受け入れており、末尾スラッシュの不一致に当たっていないことを確認してください。
このツールは、MITM が有効な場合に TLS インターセプトを実行します。トラフィックを検査する明示的な権限がある管理された環境でのみ使用してください。生成された CA は強力です。その秘密鍵は他のルート CA 秘密鍵と同様の機密性で扱ってください。共有または本番のトラストストアに CA をインストールしないでください。
貢献は歓迎します。バグや機能リクエストについては issue を開いてください。コード貢献の場合:
このプロジェクトは MIT License の下で配布されています。詳細は LICENSE を参照してください。
作者: John Southerland (GitHub: jbsouthe)
プロジェクト: http-breakout-proxy — HTTP の動作のデバッグ、開発、学習を目的としています。
| Flag | Default | Description |
|---|
-l | 127.0.0.1:8080 | プロキシが待ち受けるアドレス。UI アプリも兼ねます。 |
-mitm | true | HTTPS 中間者攻撃 (MITM) モードによるインターセプトを有効にします(TLS 傍受用のローカル CA を生成)。 |
-ca | ./ca | MITM が有効で永続化が選択されている場合に、生成された CA 証明書と鍵が保存されるディレクトリ。 |
-f | ./captures.json | キャプチャをディスクに永続化するためのオプションのパスまたはディレクトリ(例: ./captures.json)。 |
-max-body | 1048576 | 保存/表示するボディあたりの最大バイト数。それより大きなボディはセンチネル付きで切り詰められます。 |
-buffer-size | 1000 | メモリ内キャプチャ用の循環バッファ容量。 |
-v | false | デバッグ用の詳細ロギングを有効にします。 |