🚀 proxy-mcp
proxy-mcpは、明示的なHTTP/HTTPS MITMプロキシ(L7)を実行するMCPサーバーです。リクエスト/レスポンスをキャプチャし、飛行中のトラフィック(ヘッダー/ボディ/モック/転送/ドロップ)を変更でき、上流プロキシのチェーンをサポートし、プロキシへの接続のTLSフィンガープリント(JA3/JA4)とオプションの上流サーバーのJA3Sを記録します。また、Chrome、CLIツール、Dockerコンテナ、Androidデバイス/アプリをプロキシ経由でルーティングする「インターセプター」も搭載しています。
81のツール + 8つのリソース + 4つのリソーステンプレート。mockttpをベースに構築されています。
制限事項
- このプロキシを経由するように設定されたトラフィックのみを確認できます(ネットワークタップやパケットスニッファーではありません)
- 送信するJA3 + HTTP/2フィンガープリント + ヘッダー順序を偽装します(Docker/Podman内のcurl-impersonateを介して)が、JA4は偽装しません(JA4はキャプチャのみ)
- HTTPヘッダーを追加、上書き、または削除できます。送信するヘッダーの順序は、フィンガープリントの偽装を介して制御できます
- 独自のCA証明書を返します。上流サーバーの証明書チェーンを公開しません
CDP/Playwrightとの相性
CDP/Playwrightをブラウザの内部(DOM、JS実行、localStorage、クッキージャー)に使用し、proxy-mcpをワイヤーレベルのキャプチャ/操作 + リプレイに使用します。両者は相補的です。
| 機能 |
CDP / Playwright |
proxy-mcp |
| DOMの確認/変更、ページ内でのJS実行 |
はい |
いいえ |
| クッキー、localStorage、sessionStorageの読み取り |
はい(ブラウザ内部) |
DevTools Bridgeのリスト/取得ツールを介してプロキシで起動されたChromeの場合ははい。任意のクライアントの場合、ワイヤー上のCookie/Set-Cookieヘッダーを確認できます |
| HTTPリクエスト/レスポンスのボディのキャプチャ |
ブラウザのリクエストの場合ははい(プロトコル/サイズ/ストリーミングの注意事項あり) |
ボディのプレビューのみ(4KB制限、1000エントリのリングバッファ) |
| 飛行中のリクエストの変更(ヘッダー、ボディ、モック、ドロップ) |
ルート/インターセプトハンドラーを介して |
はい(宣言的なルール、ホットリロード) |
| 上流プロキシのチェーン(地理的位置、認証) |
--proxy-serverを介した単一のブラウザ |
すべてのクライアントにわたるグローバル + ホストごとの上流(SOCKS4/5、HTTP、HTTPS、PAC) |
| TLSフィンガープリントのキャプチャ(JA3/JA4/JA3S) |
いいえ |
はい |
| JA3 + HTTP/2フィンガープリントの偽装 |
いいえ |
プロキシ側のみ(curl-impersonateが偽装されたTLS 1.3、HTTP/2フレーム、およびヘッダー順序で一致するリクエストを再発行します。クライアントのTLSハンドシェイクは変更しません) |
| ブラウザ以外のトラフィックのインターセプト(curl、Python、Androidアプリ) |
いいえ |
はい(インターセプター) |
| 人間らしいマウス/キーボード/スクロール入力 |
Playwrightのpage.mouse/page.keyboardを介して(即時、検出可能なタイミング) |
はい — ベジェ曲線、フィッツの法則、WPMタイピング、緩やかなスクロールを備えたCDPヒューマナイザー |
典型的なコンボは、interceptor_chrome_launchを介してChromeを起動し(自動的にプロキシを経由するようにルーティングされます)、Playwright/CDPでページを操作し、proxy-mcpを使用してワイヤートラフィックをキャプチャ、ヘッダーを注入、またはJA3を偽装することです — すべて同じセッション内で行います。行動のリアリズムのために、Playwrightの即時のpage.click()/page.type()の代わりにhumanizer_*ツールを使用します — これらは自然なタイミングカーブで人間らしいCDPのInput.*イベントをディスパッチします。
Playwrightをプロキシで起動されたChromeにアタッチするには:
proxy_startを呼び出します
interceptor_chrome_launchを呼び出します
proxy://chrome/primaryを読み取る(またはinterceptor_chrome_cdp_infoを呼び出す)ことで、cdp.httpUrl(Playwright用)とcdp.browserWebSocketDebuggerUrl(生のCDPクライアント用)を取得します
- Playwrightでは、以下のようにします:
import { chromium } from "playwright";
const browser = await chromium.connectOverCDP("http://127.0.0.1:<cdp-port>");
プロキシに安全な組み込みCDPフロー(単一インスタンスで安全):
proxy_startを呼び出します
interceptor_chrome_launchを呼び出します
- その
target_idでinterceptor_chrome_devtools_attachを呼び出します
devtools_session_idでinterceptor_chrome_devtools_navigateを呼び出します
proxy_search_traffic --query "<hostname>"を呼び出してキャプチャを確認します
人間らしい入力フロー(ボット検出を回避):
proxy_startを呼び出します
- オプションでフィンガープリントの偽装を有効にします:
proxy_set_fingerprint_spoof --preset chrome_136
interceptor_chrome_launch --url "https://example.com"を呼び出します(偽装時にはステルスモードが自動的に有効になります)
target_idを使用してhumanizer_move / humanizer_click / humanizer_type / humanizer_scrollを使用します
- アクション間で
humanizer_idleを使用して自然な存在を維持します
🚀 クイックスタート
HTTPプロキシの設定
1) プロキシを起動し、エンドポイントを取得する
proxy_start
返されたportとエンドポイントhttp://127.0.0.1:<port>を使用します。
2) ブラウザの設定(推奨:インターセプター)
Chromeインターセプターを使用すると、プロキシフラグと証明書の信頼が自動的に設定されます。
interceptor_chrome_launch --url "https://example.com"
次に、同じターゲットにDevToolsを安全にバインドします。
interceptor_chrome_devtools_attach --target_id "chrome_<pid>"
interceptor_chrome_devtools_navigate --devtools_session_id "devtools_<id>" --url "https://apify.com"
3) ブラウザの設定(手動の代替手段)
Chromeを手動で起動する場合は、自分でプロキシフラグを渡します。
google-chrome --proxy-server="http://127.0.0.1:<port>"
4) CLI/プロセスの設定
プロキシ環境変数を設定することで、任意のプロセスをproxy-mcp経由でルーティングします。
export HTTP_PROXY="http://127.0.0.1:<port>"
export HTTPS_PROXY="http://127.0.0.1:<port>"
export NO_PROXY="localhost,127.0.0.1"
クライアントがTLSを検証する場合、proxy-mcpのCA証明書を信頼する(proxy_get_ca_certを参照)か、ターミナルインターセプター(interceptor_spawn)を使用します。これは、プロキシ環境変数と共通のCA環境変数(curl、Node、Python requests、Git、npm/yarnなど)を設定します。
interceptor_spawn --command curl --args '["-s","https://example.com"]'
明示的なcurlの例:
curl --proxy http://127.0.0.1:<port> http://example.com
curl --proxy http://127.0.0.1:<port> https://example.com
5) 上流プロキシのチェーン
proxy-mcpから別の上流プロキシへのオプションのプロキシチェーンを設定します(地理的位置、認証、またはIP評判のため)。
クライアント/アプリ → proxy-mcp(ローカルの明示的なプロキシ) → 上流プロキシ(オプションのチェーン層)
proxy_set_upstream --proxy_url "socks5://user:pass@upstream.example:1080"
サポートされる上流URLスキーム:socks4://、socks5://、http://、https://、pac+http://。
典型的な地理的ルーティングの例:
proxy_set_upstream --proxy_url "socks5://user:pass@fr-exit.example.net:1080"
proxy_set_upstream --proxy_url "http://user:pass@proxy.example.net:8080" --no_proxy '["localhost","127.0.0.1",".corp.local"]'
proxy_set_host_upstream --hostname "api.example.com" --proxy_url "https://user:pass@us-exit.example.net:443"
proxy_remove_host_upstream --hostname "api.example.com"
proxy_clear_upstream
HTTPS MITMの場合、プロキシのCA証明書はターゲット環境で信頼されている必要があります(proxy_get_ca_cert)。
6) 迅速に検証し、トラブルシューティングする
proxy_list_traffic --limit 20
proxy_search_traffic --query "example.com"
一般的な問題:
- 誤ったブラウザインスタンスからのトラフィック(解決策:
interceptor_chrome_devtools_attachを使用する)
- ターゲットでHTTPS証明書の信頼が不足している
NO_PROXYが予期されるホストをバイパスしている
chrome-devtools-mcpがインストールされていない(ENOENT):interceptor_chrome_devtools_attachはナビゲーションのみのモードにフォールバックします。完全なスナップショット/ネットワーク/コンソール/スクリーンショットのサポートを得るには、chrome-devtools-mcpをインストールしてください。
MCPから直接サイドカーをプル/インストールします。
interceptor_chrome_devtools_pull_sidecar --version "0.2.2"
7) HARのインポート + リプレイ
HARを永続的なセッションにインポートし、既存のセッションクエリ/調査ツールで分析します。
proxy_import_har --har_file "/path/to/capture.har" --session_name "imported-run"
proxy_list_sessions
proxy_query_session --session_id SESSION_ID --hostname_contains "api.example.com"
proxy_get_session_handshakes --session_id SESSION_ID
リプレイはデフォルトでドライラン(プレビューのみ)です。実行するには明示的なモードが必要です。
proxy_replay_session --session_id SESSION_ID --mode dry_run --limit 20
proxy_replay_session --session_id SESSION_ID --mode execute --limit 20
proxy_replay_session --session_id SESSION_ID --mode execute --target_base_url "http://127.0.0.1:8081"
注:インポートされたHARエントリ(およびproxy_replay_sessionによって作成されたエントリ)にはJA3/JA4/JA3Sハンドシェイクメタデータが含まれていません。ハンドシェイクフィンガープリントを分析するには、ライブのプロキシキャプチャトラフィックを使用してください。
セットアップ
前提条件
- Node.js 22+
- DockerまたはPodman(TLSフィンガープリントの偽装に必要)
インストールとビルド
npm install
npm run build
実行
node dist/index.js
node dist/index.js --transport http --port 3001
--transportと--portは、環境変数TRANSPORTとPORTも受け入れます。
グローバルインストール(オプション)
npm install -g .
これにより、proxy-mcpコマンドがシステム全体で使用可能になります(package.jsonのbinを参照)。
Claude Codeの.mcp.json
stdioトランスポート(デフォルト):
{
"mcpServers": {
"proxy": {
"command": "node",
"args": ["/path/to/proxy-mcp/dist/index.js"]
}
}
}
グローバルにインストールされている場合は、proxy-mcpコマンドを直接使用できます。
{
"mcpServers": {
"proxy": {
"command": "proxy-mcp"
}
}
}
ストリーミング可能なHTTPトランスポート:
{
"mcpServers": {
"proxy": {
"type": "streamable-http",
"url": "http://127.0.0.1:3001/mcp"
}
}
}
✨ 主な機能
- 明示的なHTTP/HTTPS MITMプロキシ(L7)を実行し、リクエスト/レスポンスをキャプチャする
- 飛行中のトラフィック(ヘッダー/ボディ/モック/転送/ドロップ)を変更できる
- 上流プロキシのチェーンをサポートする
- TLSフィンガープリント(JA3/JA4)とオプションの上流サーバーのJA3Sを記録する
- Chrome、CLIツール、Dockerコンテナ、Androidデバイス/アプリをプロキシ経由でルーティングする「インターセプター」を搭載
📦 インストール
前提条件
- Node.js 22+
- DockerまたはPodman(TLSフィンガープリントの偽装に必要)
インストールとビルド
npm install
npm run build
実行
node dist/index.js
node dist/index.js --transport http --port 3001
--transportと--portは、環境変数TRANSPORTとPORTも受け入れます。
グローバルインストール(オプション)
npm install -g .
これにより、proxy-mcpコマンドがシステム全体で使用可能になります(package.jsonのbinを参照)。
💻 使用例
基本的な使用法
proxy_start
proxy_session_start --capture_profile full --session_name "reverse-run-1"
interceptor_chrome_launch
interceptor_spawn --command curl --args '["https://example.com"]'
interceptor_android_activate --serial DEVICE_SERIAL
proxy_set_upstream --proxy_url socks5://user:pass@geo-proxy:1080
proxy_mock_response --url_pattern "/api/v1/config" --status 200 --body '{"feature": true}'
proxy_inject_headers --hostname "api.example.com" --headers '{"Authorization": "Bearer token123"}'
proxy_list_traffic --hostname_filter "api.example.com"
proxy_search_traffic --query "error"
proxy_list_tls_fingerprints
proxy_set_ja3_spoof --ja3 "771,4865-..."
proxy_set_fingerprint_spoof --preset chrome_136 --host_patterns '["example.com"]'
interceptor_chrome_launch --url "https://example.com"
proxy_list_fingerprint_presets
humanizer_move --target_id "chrome_<pid>" --x 500 --y 300
humanizer_click --target_id "chrome_<pid>" --selector "#login-button"
humanizer_type --target_id "chrome_<pid>" --text "user@example.com" --wpm 45
humanizer_scroll --target_id "chrome_<pid>" --delta_y 300
humanizer_idle --target_id "chrome_<pid>" --duration_ms 2000 --intensity subtle
proxy_list_sessions
proxy_query_session --session_id SESSION_ID --hostname_contains "api.example.com"
proxy_export_har --session_id SESSION_ID
📚 詳細ドキュメント
ツールリファレンス
ライフサイクル(4)
| ツール |
説明 |
proxy_start |
MITMプロキシを起動し、CA証明書を自動生成する |
proxy_stop |
プロキシを停止する(トラフィック/証明書は保持される) |
proxy_status |
実行状態、ポート、ルール/トラフィックのカウント |
proxy_get_ca_cert |
CA証明書のPEM + SPKIフィンガープリント |
上流プロキシ(4)
| ツール |
説明 |
proxy_set_upstream |
グローバルな上流プロキシを設定する |
proxy_clear_upstream |
グローバルな上流を削除する |
proxy_set_host_upstream |
ホストごとの上流の上書き |
proxy_remove_host_upstream |
ホストごとの上書きを削除する |
インターセプトルール(7)
| ツール |
説明 |
proxy_add_rule |
マッチャーとハンドラーを持つルールを追加する |
proxy_update_rule |
既存のルールを変更する |
proxy_remove_rule |
ルールを削除する |
proxy_list_rules |
すべてのルールを優先度順にリストする |
proxy_test_rule_match |
シミュレートされたリクエストまたはキャプチャされたエクスチェンジにどのルールがマッチするかをテストし、詳細な診断情報を提供する |
proxy_enable_rule |
無効にされたルールを有効にする |
proxy_disable_rule |
削除せずに無効にする |
クイックデバッグの例:
proxy_test_rule_match --mode simulate --request '{"method":"GET","url":"https://example.com/api/v1/items","headers":{"accept":"application/json"}}'
proxy_test_rule_match --mode exchange --exchange_id "ex_abc123"
トラフィックキャプチャ(4)
| ツール |
説明 |
proxy_list_traffic |
フィルター付きのページングされたトラフィックリスト |
proxy_get_exchange |
IDで完全なエクスチェンジの詳細を取得する |
proxy_search_traffic |
トラフィック全体で全文検索する |
proxy_clear_traffic |
キャプチャバッファをクリアする |
変更ショートカット(3)
| ツール |
説明 |
proxy_inject_headers |
一致するトラフィックにヘッダーを追加/上書き/削除する(ヘッダーを削除するには値をnullに設定する) |
proxy_rewrite_url |
リクエストURLを書き換える |
proxy_mock_response |
一致するリクエストにモックレスポンスを返す |
TLSフィンガープリント(9)
| ツール |
説明 |
proxy_get_tls_fingerprints |
単一のエクスチェンジのJA3/JA4クライアントフィンガープリント + JA3Sを取得する |
proxy_list_tls_fingerprints |
すべてのトラフィックにわたる一意のJA3/JA4フィンガープリントをカウント付きでリストする |
proxy_set_ja3_spoof |
レガシー:JA3の偽装を有効にする(非推奨、proxy_set_fingerprint_spoofを使用) |
proxy_clear_ja3_spoof |
フィンガープリントの偽装を無効にし、curl-impersonateコンテナを停止する |
proxy_get_tls_config |
現在のTLS設定(サーバーキャプチャ、JA3偽装状態)を返す |
proxy_enable_server_tls_capture |
サーバー側のJA3Sキャプチャを切り替える(tls.connectをモンキーパッチする) |
proxy_set_fingerprint_spoof |
Docker/Podman内のcurl-impersonateを介して完全なTLS + HTTP/2フィンガープリントの偽装を有効にする。ブラウザのプリセットをサポートする。 |
proxy_list_fingerprint_presets |
利用可能なブラウザのフィンガープリントプリセットをリストする(例:chrome_131、chrome_136、chrome_136_linux、firefox_133) |
proxy_check_fingerprint_runtime |
フィンガープリントの偽装のためのDocker/Podmanの準備状態を事前チェックする(ランタイムの健全性、イメージ/コンテナの存在) |
フィンガープリントの偽装は、DockerまたはPodmanコンテナ内で実行されるcurl-impersonateを介してプロキシからリクエストを再発行することで機能します。curl-impersonateはBoringSSL + nghttp2(Chromeと同じTLSおよびHTTP/2ライブラリ)を使用するため、TLS 1.3およびHTTP/2のフィンガープリント(SETTINGS、WINDOW_UPDATE、PRIORITYフレーム)は構造的に実際のブラウザと一致します。オリジンサーバーは、プロキシの偽装されたTLS、HTTP/2、およびヘッダー順序を見る — 元のクライアントのものではありません。user_agentが設定されている場合(プリセットを介しても)、proxy-mcpはまた、ChromiumのUAクライアントヒントヘッダー(sec-ch-ua*)を正規化して、偽装されたUser-Agentに一致させます(矛盾するヒントを転送することは一般的なボットのシグナルです)。proxy_set_fingerprint_spoofをブラウザのプリセットとともに使用すると、1コマンドでセットアップできます。proxy_set_ja3_spoofは下位互換性のために残されていますが、カスタムJA3文字列は無視されます(代わりにプリセットのcurl-impersonateターゲットが使用されます)。JA4フィンガープリントはキャプチャされます(読み取り専用)が、偽装はサポートされていません。
インターセプター(18)
インターセプターは、ターゲット(ブラウザ、プロセス、デバイス、コンテナ)を自動的にプロキシ経由でトラフィックをルーティングするように設定します。
検出(3)
| ツール |
説明 |
interceptor_list |
すべてのインターセプターを可用性とアクティブなターゲットの数とともにリストする |
interceptor_status |
特定のインターセプターの詳細な状態 |
interceptor_deactivate_all |
緊急クリーンアップ:すべてのタイプのアクティブなインターセプターをすべて終了する |
Chrome(4)
| ツール |
説明 |
interceptor_chrome_launch |
プロキシフラグとSPKI証明書の信頼を持ってChrome/Chromium/Brave/Edgeを起動する |
interceptor_chrome_cdp_info |
起動されたChromeのCDPエンドポイント(HTTP + WebSocket)とタブターゲットを取得する |
interceptor_chrome_navigate |
起動されたChromeターゲットのCDPページWebSocketを介してタブをナビゲートし、プロキシキャプチャを検証する |
interceptor_chrome_close |
ターゲットIDでChromeインスタンスを閉じる |
起動時には分離された一時プロファイルが使用され、閉じると自動的にクリーンアップされます。chrome、chromium、brave、edgeをサポートします。
フィンガープリントの偽装がアクティブな場合(proxy_set_fingerprint_spoof)、Chromeはステルスモードで起動します:chrome-launcherのデフォルトのフラグで検出可能なアーティファクトを作成するもの(例:--disable-extensionsによるchrome.runtimeの削除)は、選りすぐりの最小限のセットに置き換えられ、ページスクリプトが実行される前にCDPを介して反検出パッチが注入されます。これには、navigator.webdriver、chrome.runtimeの存在、Permissions.query、およびエラースタックのサニタイズが含まれます。
ターミナル / プロセス(2)
| ツール |
説明 |
interceptor_spawn |
プロキシ環境変数(HTTP_PROXY、SSL証明書など)が事前に設定されたコマンドを起動する |
interceptor_kill |
起動されたプロセスを終了し、stdout/stderrを取得する |
curl、Node.js、Python requests、Deno、Git、npm/yarnをカバーする18以上の環境変数を設定します。
Android ADB(4)
| ツール |
説明 |
interceptor_android_devices |
ADBを介して接続されたAndroidデバイスをリストする |
interceptor_android_activate |
完全なインターセプト:CA証明書を注入、ADBリバーストンネル、オプションのWi-Fiプロキシ |
interceptor_android_deactivate |
ADBトンネルを削除し、Wi-Fiプロキシをクリアする |
interceptor_android_setup |
クイックセットアップ:CA証明書をプッシュ + ADBリバーストンネル(Wi-Fiプロキシなし) |
注意事項: CA証明書の注入にはルートアクセスが必要です。Android 14+(/apex/com.android.conscrypt/cacerts/)をサポートします。Wi-Fiプロキシはオプトイン(デフォルトでオフ)です。
Android Frida(3)
| ツール |
説明 |
interceptor_frida_apps |
Fridaを介してデバイス上で実行中のアプリをリストする |
interceptor_frida_attach |
アプリにアタッチし、SSLのピン解除 + プロキシリダイレクトスクリプトを注入する |
interceptor_frida_detach |
アプリからFridaセッションをデタッチする |
注意事項: デバイス上でfrida-serverが実行されている必要があります。frida-js(ホスト上にネイティブバイナリがない純粋なJS)を使用します。SSLのピン解除は、OkHttp、BoringSSL、TrustManager、システムTLSをカバーしますが、QUICまたはカスタムTLSスタックに対しては機能しない場合があります。
Docker(2)
| ツール |
説明 |
interceptor_docker_attach |
実行中のコンテナにプロキシ環境変数とCA証明書を注入する |
interceptor_docker_detach |
コンテナからプロキシ設定を削除する |
2つのモード:exec(ライブ注入、既存のプロセスは再起動が必要)とrestart(コンテナを停止 + 再起動)。host.docker.internalをプロキシURLに使用します。
DevToolsブリッジ(14)
管理されたchrome-devtools-mcpサイドカーの周りのプロキシに安全なラッパーで、特定のinterceptor_chrome_launchターゲットにバインドされています。
| ツール |
説明 |
interceptor_chrome_devtools_pull_sidecar |
chrome-devtools-mcpをインストール/プルして、完全なDevToolsブリッジアクションを利用可能にする |
interceptor_chrome_devtools_attach |
1つのChromeインターセプターターゲットに対してバインドされたDevToolsサイドカーセッションを開始する |
interceptor_chrome_devtools_navigate |
バインドされたDevToolsセッションを介してナビゲートし、一致するプロキシトラフィックを検証する |
interceptor_chrome_devtools_snapshot |
バインドされたDevToolsセッションからアクセシビリティスナップショットを取得する |
interceptor_chrome_devtools_list_network |
バインドされたDevToolsセッションからネットワークリクエストをリストする |
interceptor_chrome_devtools_list_console |
バインドされたDevToolsセッションからコンソールメッセージをリストする |
interceptor_chrome_devtools_screenshot |
バインドされたDevToolsセッションからスクリーンショットをキャプチャする |
interceptor_chrome_devtools_list_cookies |
フィルター、ページング、およびトランケートされた値のプレビューを備えたトークン効率的なクッキーリスト |
interceptor_chrome_devtools_get_cookie |
cookie_idで1つのクッキーを取得する(出力を制限するために値は制限される) |
interceptor_chrome_devtools_list_storage_keys |
ページングと値のプレビューを備えたトークン効率的なlocalStorage/sessionStorageキーリスト |
interceptor_chrome_devtools_get_storage_value |
item_idで1つのストレージ値を取得する |
interceptor_chrome_devtools_list_network_fields |
セッション作成以降にプロキシでキャプチャされたトラフィックからのトークン効率的なヘッダーフィールドリスト |
interceptor_chrome_devtools_get_network_field |
field_idで1つの完全なヘッダーフィールド値を取得する |
interceptor_chrome_devtools_detach |
1つのバインドされたDevToolsサイドカーセッションを閉じる |
注:DevToolsのレスポンスからの画像ペイロードは、大きなbase64ブロブをコンテキストに押し込まないように、MCPの出力から削除されます。
スクリーンショットにfile_pathが提供され、サイドカーが画像をインラインで返す場合、proxy-mcpはラッパー内でそれをディスクに書き込みます。
セッション(13)
長時間の実行とクラッシュ後の分析のための永続的でクエリ可能なディスク上のキャプチャ。
| ツール |
説明 |
proxy_session_start |
永続的なセッションキャプチャを開始する(プレビューまたは完全ボディモード) |
proxy_session_stop |
アクティブな永続的なセッションを停止して終了する |
proxy_session_status |
永続性のランタイムステータス(アクティブなセッション、バイト数、ディスク容量エラー) |
proxy_import_har |
ディスクからHARファイルを新しい永続的なセッションにインポートする |
proxy_list_sessions |
ディスクから記録されたセッションをリストする |
proxy_get_session |
1つのセッションのマニフェスト/詳細を取得する |
proxy_query_session |
記録されたエクスチェンジに対するインデックス付きクエリ |
proxy_get_session_handshakes |
セッションエントリのJA3/JA4/JA3Sハンドシェイクメタデータの可用性を報告する |
proxy_get_session_exchange |
セッションから1つのエクスチェンジを取得する(オプションで完全なボディを含む) |
proxy_replay_session |
選択されたセッションのリクエストをドライランまたは実行リプレイする |
proxy_export_har |
完全なセッションまたはフィルターされたサブセットをHARにエクスポートする |
proxy_delete_session |
保存されたセッションを削除する |
proxy_session_recover |
不適切なシャットダウン後にレコードからインデックスを再構築する |
ヒューマナイザー — CDP入力(5)
Chrome DevToolsプロトコルを介した人間らしいブラウザ入力。現実的なタイミング、ベジェ曲線のマウスパス、および自然なキーストロークの遅延でInput.*イベントをディスパッチします。target_id(Chromeインターセプターターゲット)にバインドされます — 各ターゲットに独自の永続的なCdpSessionを管理し、DevToolsブリッジサイドカーとは独立しています。
| ツール |
説明 |
humanizer_move |
フィッツの法則に基づく速度スケーリングと緩やかなタイミングでベジェ曲線に沿ってマウスを移動する |
humanizer_click |
要素(CSSセレクター)または座標に移動し、人間らしいタイミングでクリックする。左/右/中央ボタンとマルチクリックをサポートする |
humanizer_type |
WPM、バイグラム頻度、シフトペナルティ、単語の一時停止、およびオプションのタイポ注入に基づいて文字ごとの遅延でテキストを入力する |
humanizer_scroll |
複数のホイールイベントを介してeaseInOutQuadの加速/減速でスクロールする |
humanizer_idle |
マウスのマイクロジャイターと時折のマイクロスクロールでアイドル状態をシミュレートし、アイドル検出を回避する |
すべてのツールは、事前のinterceptor_chrome_launchからのtarget_idを必要とします。エンジンは呼び出し間で追跡されたマウス位置を維持するため、humanizer_moveの後にhumanizer_clickを実行すると、連続したパスが生成されます。
動作の詳細:
- マウスパス:ランダムな制御点を持つ3次ベジェ曲線、フィッツの法則に基づく距離/サイズのスケーリング、オプションのオーバーシュート + 修正アーク
- タイピング:WPMからの基本遅延、バイグラム頻度("th"などの一般的なペアはより速い)、シフトキーのペナルティ、単語境界の一時停止によって修正されます。オプションのタイポ注入は、QWERTYの近傍マップとバックスペースの修正を使用します
- スクロール:easeInOutQuadの速度曲線に従って複数のホイールイベントに分散された総デルタ
- アイドル:周期的なマイクロジャイター(±3pxの微妙な/±8pxの通常)と設定可能な強度でのランダムなマイクロスクロール
リソース
| URI |
説明 |
proxy://status |
プロキシの実行状態と設定 |
proxy://ca-cert |
CA証明書のPEM |
proxy://traffic/summary |
トラフィック統計:メソッド/ステータスの内訳、トップのホスト名、TLSフィンガープリントの統計 |
proxy://interceptors |
すべてのインターセプターのメタデータとアクティベーションステータス |
proxy://chrome/devtools/sessions |
ChromeターゲットIDにバインドされたアクティブなDevToolsサイドカーセッション |
proxy://sessions |
永続的なセッションカタログ + ランタイムの永続性ステータス |
proxy://chrome/primary |
最も最近起動されたChromeインスタンスのCDPエンドポイント |
proxy://chrome/targets |
アクティブなChromeインスタンスのCDPエンドポイント + タブターゲット |
proxy://chrome/{target_id}/cdp |
特定のChromeインスタンスのCDPエンドポイント(リソーステンプレート) |
proxy://sessions/{session_id}/summary |
1つの記録されたセッションの集計統計(リソーステンプレート) |
proxy://sessions/{session_id}/timeline |
時間バケット化されたリクエスト/エラーのタイムライン(リソーステンプレート) |
proxy://sessions/{session_id}/findings |
トップのエラー/低速のエクスチェンジ/ホストのエラー率(リソーステンプレート) |
🔧 技術詳細
アーキテクチャ
- 状態:
ProxyManagerシングルトンがmockttpサーバー、ルール、トラフィックを管理します
- ルールの再構築:ルールはmockttpの
start()の前に設定する必要があるため、ルールの変更は停止/再作成/再起動のサイクルをトリガーします
- トラフィックキャプチャ:
on('request') + on('response')イベント、リクエストIDで関連付けられます
- リングバッファ:最大1000エントリ、ボディのプレビューは4KBに制限されます
- TLSキャプチャ:mockttpソケットメタデータからのクライアントJA3/JA4;
tls.connectのモンキーパッチを介したサーバーJA3S
- TLS偽装:Docker/Podmanコンテナ内のcurl-impersonate(BoringSSL + nghttp2);最初の偽装リクエストで遅延起動されます
- インターセプター:
InterceptorManagerによって管理され、各タイプは独立して登録されます
- ヒューマナイザー:各Chromeターゲットに永続的な
CdpSessionを持つシングルトンHumanizerEngine、呼び出し間でマウス位置を追跡します。純粋なTypeScript — 外部依存関係なし(ベジェパス、フィッツの法則、バイグラムタイミングはすべて内部で計算されます)
テスト
npm test
npm run test:unit
npm run test:integration
npm run test:e2e
📄 ライセンス
コアライブラリ
ベンダー化されたFridaスクリプト
src/frida-scripts/vendor/内のすべてのスクリプトは、httptoolkit/frida-interception-and-unpinning(MIT)に由来します。
config-template.js — プロキシ/証明書の設定注入
android-certificate-unpinning.js — TrustManager + OkHttp + BoringSSLフック
android-system-certificate-injection.js — KeyStoreを介したランタイム証明書の注入
android-proxy-override.js — ProxySelectorのモンキーパッチ
native-tls-hook.js — BoringSSL/OpenSSLのネイティブフック
native-connect-hook.js — libcのconnect()リダイレクト