HTTP/HTTPSリクエストを傍受し、(コンテンツ、宛先など)などの情報を抽出し、さまざまな分析タスクを実行して、最後にリクエストをドロップするかどうかを決定できるコマンドラインツールを探しています。法的要求は、アプリケーションに転送する必要があります。
tcpdump
、 Wireshark 、または Snort と性質が似ているツールですが、HTTPレベルで動作します。
mitmproxy を試してください。
mitmproxyは、HTTP対応のSSL対応man-in-the-middleプロキシです。トラフィックフローをオンザフライで検査および編集できるコンソールインターフェイスを提供します。
mitmdumpはmitmproxyのコマンドラインバージョンであり、同じ機能を備えていますが、ユーザーインターフェイスはありません。 HTTPのtcpdumpを考えてください。
ローカルホストのポート4000でリッスンしているサンプル Jekyll Bootstrap アプリをセットアップしました。トラフィックを傍受するには、次のようにします。
% mitmproxy --mode reverse:http://localhost:4000 -p 4001
次に、Webブラウザー(http://localhost:4001
)からポート4001でmitmproxyに接続します。これにより、mitmproxyで次のようになります。
次に、任意のGET
結果を選択して、そのGET
に関連付けられたヘッダー情報を表示できます。
状況によっては、着信HTTP要求を受け入れ、発信HTTPS要求を行うプロキシを使用できます。例として、git
とgithub.comの間のトラフィックをキャプチャしたいと思いました。私は mitmproxy を使用しました:
mitmproxy -s httpser.py
どこ httpser.py
は:
def request(context, flow):
flow.request.scheme = 'https'
flow.request.port = 443
次に、git
を次のように実行しました。
export http_proxy="http://127.0.0.1:8080/"
git clone http://github.com/oxplot/difftr
wireshark
を使用してlocalhost
をリスニングすると、プレーントラフィックをキャプチャできます。プロキシがないと、githubはHTTPSを使用するようにgit
をリダイレクトします。
mitmproxy
/mitmdump
HTTPSのtcpdump
に相当するのはmitmdump
です。手順は次のとおりです。
mitmproxy
パッケージをインストールします(macOS:brew install mitmproxy
)。次のコマンドで mitmproxy CA証明書 をインストールします。
$ mitmdump --mode reverse:http://mitm.it/ -p 8080
$ wget --content-disposition http://localhost:8080/cert/pem
$ open mitmproxy-ca-cert.pem
# Open, install and mark the certificate as trusted.
次に、リバースプロキシをテストする方法に関する簡単なテストを示します。
mitmdump --mode reverse:https://example.com/ -p 4433
。別のシェルで、次のコマンドを実行します:curl https://localhost:4433
。
これで、ページのソースが表示され、mitmdump
コマンドによって次のような出力が生成されます。
Proxy server listening at http://*:4433
[::1]:49446: clientconnect
[::1]:49446: GET https://example.com/ HTTP/2.0
<< 200 1.24k
[::1]:49446: clientdisconnect
すべてのトラフィックに対して、単にmitmdump
またはmitmproxy
を実行します。
詳しくは mitmproxy
docs page をご覧ください。
MacOSを使用している場合は、ホスト間のすべてのHTTPおよびSSL/HTTPSトラフィックを表示できる Charles Proxy アプリ(GUI)もあります。