黒毛和牛モモバラ切り落し100g298円

iPhoneアプリを作ってます。リリースノートとかごにょごにょとか用ブログです。

mitmproxyでパケットキャプチャしようと思ったら結構大変だったのでメモ

HTTP/HTTPSパケットキャプチャが簡単にできるmitmproxyというPythonで書かれたhttp proxyがあるのですが、動かすまでが結構大変でしたのでメモっときます。

macportsのmitmproxyは古い

macportsにmitmproxyがあったので最初これを試してみたのですが、バージョン0.8になってましてちょっと古いです。古いだけなら問題ないのですが、macportsのurwidが新しいのでパッケージ間の依存性に問題が発生し、mitmproxyの起動まではできますがキャプチャを始めると例外で落ちますので使えません。(発生している問題はgithubのIssue Crash - raise IndexError, "no widget at position %s"と同じです。)

pipからインストールしてもSSLのパケットキャプチャができない

mitmproxy公式サイトのinstallationドキュメントに従い、pipを使ってインストールすると、httpパケットキャプチャは問題なく動きますがhttpsをキャプチャしようとすると例外が発生します(こちらは落ちません)。

これはPython.frameworkをインストール(した記憶は無いんですが)した際のpyOpenSSLのバージョンが古いことが問題のようです。

コマンドラインから

$ pydoc OpenSSL

を実行するとpyOpenSSLのバージョンが表示されますので、1.0.2になっている場合/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/OpenSSLを/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/OpenSSL.oldか何か適当な名前にリネームすると動きます。(mitmproxyをpipでインストールした際にpyOpenSSL-1.0.3はインストール済みですので、ライブラリの解決方法を修正すれば直ります。)

python再インストールしたった | The Coherence WorldによるとPython.framework自体は消しても問題ないようですので後で作業しようと思います。