
Windows システム上でネットワークトラフィックの傍受、分析、変更を目的とした、ヘッドレスでスクリプト可能なコマンドラインベースの MITM プロキシ。

Windows システム上でネットワークトラフィックの傍受、解析、変更を行うために設計された、ヘッドレスでスクリプト可能なコマンドラインベースの MITM プロキシです。業界標準の GUI プロキシと同様に動作しますが、自動化環境、ヘッドレス運用、開発ワークフローとの統合に最適化されています。
注記: これは Node.js で実装された、スタンドアロンで依存関係のないツールです。
PacketPirate は、システム全体を対象としたネットワーク傍受ツールです。Windows HTTP プロキシ設定を活用することで、お使いのマシン上で動作するあらゆるアプリケーションからのトラフィックをキャプチャできます。これには Web ブラウザ(Chrome、Edge)、CLI ツール(curl、git)、デスクトップアプリケーション(Spotify、VS Code、Discord)が含まれます。
グローバルなシステム傍受: システムプロキシを尊重するあらゆるプロセスからの HTTP/HTTPS トラフィックをキャプチャします。
プロセス認識: トラフィックを生成しているアプリケーションを正確に特定します。
動的ルールエンジン: JSON で設定可能で、一致するトラフィックに対して特定のアクション(例: トークン抽出、リクエストログ記録)を実行します。
全トラフィックロギング: 解析用に完全なリクエスト/レスポンスボディ(HTML、JSON、バイナリ)をダンプできます。
ヘッドレスアーキテクチャ: 完全に CLI から実行され、バックグラウンドサービスや自動テストパイプラインに適しています。
カスタム証明書管理: HTTPS 復号化のための自己署名ルート CA の生成および信頼設定用ユーティリティが含まれます。
リポジトリをクローンし、環境を初期化します:
# 1. Generate local SSL certificates
npm run setup
# 2. Trust the generated Root CA
npm run trust
# Note: Requires administrative approval to add the certificate to the Trusted Root Store.
プロキシサーバーを起動します:
npm start
これにより、標準の CLI インターフェースが起動します。
対話型メニューには、次のコントロールがあります:
code.exe のみを監視)。Authorization ヘッダー内の Bearer トークンをヒューリスティックに検出します。jsonl ログファイルにキャプチャします。傍受ロジックは config/rules.json で定義されます。このファイルにより、トラフィック処理の永続的な設定が可能になります。
スキーマ:
{
"rules": [
{
"name": "Description of rule",
"host": "hostname.match",
"urlPattern": "regex_pattern",
"action": "log | save_token",
"outputFile": "path/to/output.txt",
"tokenFilter": "regex_filter"
}
]
}
例:
{
"rules": [
{
"name": "Test API",
"host": "jsonplaceholder.typicode.com",
"action": "save_token",
"outputFile": "test_tokens.txt"
}
]
}
このツールはデュアルサーバーアーキテクチャを採用しています:
CONNECT トンネリングリクエストを処理し、ホストフィルタリングを実行します。EADDRINUSE エラーを自動的に検出し、空きポートが見つかるまでポート番号を増加させます。SIGINT/SIGTERM ハンドラーを実装し、終了時にプロキシ設定が元に戻されることを保証して、ネットワーク接続の問題を防ぎます。このツールは、HTTPS 傍受のためにデュアル証明書モデルに依存しています:
npm run setup は自己署名ルート CA(PacketPirateRoot)を作成します。
New-SelfSignedCertificate を使用して、5 年間有効なキーペアを生成します。src/certs/server.pfx(PKCS#12 形式)にエクスポートされます。npm run trust は、このルート CA を Windows の CurrentUser\Root ストアに注入します。
LocalMachine ではなく CurrentUser を対象とすることで、信頼範囲を特定のユーザープロファイルに限定し、システム全体のリスクを軽減します。security.enterprise_roots.enabled)が必要です。npm run untrust はクリーンな破棄を提供します。
FriendlyName("PacketPirateRoot")によって証明書を特定し、他のユーザー証明書に触れることがないようにします。このプロジェクトは、Node.js を使用したシステムプログラミングの実践的な例です。一般的な Web サーバーを超えて、オペレーティングシステムやネットワークスタックとより低いレベルで対話します。
participant App as Application (VS Code)
participant OS as Windows OS
participant Proxy as Proxy Server
participant MITM as MITM Server
participant Web as Internet
Note over App,Proxy: 1. Plain HTTP Tunneling
App->>Proxy: CONNECT google.com:443
Proxy-->>App: 200 Connection Established
Note over Proxy,MITM: 2. The "Hand-Off" Trick
Proxy->>MITM: Pipe socket data (raw encrypted bytes)
Note over App,MITM: 3. TLS Handshake and Decryption
MITM-->>App: ServerHello (signed by local root CA)
App->>MITM: Encrypted request (GET /)
Note over MITM: 4. Interception Logic
MITM->>MITM: Decrypt → Inspect headers → Log
Note over MITM,Web: 5. Upstream Forwarding
MITM->>Web: New HTTPS request (GET /)
Web-->>MITM: Response
MITM-->>App: Response

Node.js の標準 http モジュールは、同じサーバーインスタンス上で CONNECT メソッド(HTTPS トンネルに使用)と通常の HTTPS トラフィックを簡単に処理できません。
CONNECT リクエストを処理し、単純な TCP パイプとして動作します。netstat ハック)どのアプリがトラフィックを送信しているかをどのようにして知るのでしょうか? TCP パケット自体には「プロセス ID」のラベルは付いていません。
netstat -ano を実行して、ポート 54321 を所有する PID を特定します。データを効率的に処理するために、Node.js の Streams を使用します。完全な 10MB のレスポンスがダウンロードされるのを待ってから表示する代わりに、ストリームを「フォーク」します:
PassThrough ストリームを使用して行われ、追加のレイテンシーを最小限に抑えながらリアルタイム監視を可能にします。GNU GPL v3.0