mitmproxyを使ってnodejsの通信を確認する

mitmproxyとは

Proxyのフリをしてhttp, https通信の中身を傍受したり、その通信の中身を編集、再送などできるツール。名前そのまんまやん。

https://mitmproxy.org/

https://github.com/mitmproxy/mitmproxy

モチベーション

nodejsで外部APIへ接続しているnpmパッケージをハック的に上書きしてエンドポイントパスやヘッダ、bodyなどを変更した。この変更が期待通りに動作しているかを確認したい。

node --inspect を利用して Chrome Dev Tools で確認できればいいのだが、あいにくネットワークタブが無いためWebページのようにリクエストをリスト形式で確認することができない(実装してほしい)。

https通信のため、Wiresharkなどを利用してもドメイン名までしか判別できない。

そんな願いを叶えてくれそうなのがmitmproxyなのである。

インストール

Macの場合はbrewでインストールできる。Python製なので大体の環境で動くはず。

$ brew install mitmproxy

dockerコンテナもあるけどhttpsを確認したい場合はcertsの共有が面倒なのでbrewで直接入れるのがおすすめ。

使い方

mitmproxyの起動

proxyはデフォルトだとport 8080で実行される。

GUIの場合👇

$ mitmweb

CUIもあるが、使ったことはない。👇(mitmwebはmitmproxyのGUIインターフェイス)

$ mitmproxy

nodejsの起動

環境変数の設定方法は利用しているシェルに合わせる。

mitmproxyを起動していれば ~/.mitmproxy/* に証明書関係が出力されている。

$ HTTP_PROXY=http://localhost:8080 HTTPS_PROXY=http://localhost:8080 NODE_EXTRA_CA_CERTS=~/.mitmproxy/mitmproxy-ca-cert.pem node

動作確認

http://localhost:8081 でGUIが起動している(mtimwebで起動した場合)。操作は難しくないので省略。

この記事をシェア

弊社では、一緒に会社を面白くしてくれる仲間を募集しています。
お気軽にお問い合わせください!