LoginSignup
2
0

More than 5 years have passed since last update.

mitmproxy に独自の content view を追加する

Last updated at Posted at 2017-09-16

content view とは

mitmproxy はリクエスト・レスポンスの中身を表示する際に、表示する形式を選ぶことができます。

image.png

この形式ごとに表示する仕組みを mitmproxy では content view と呼びます。

html, css, json など基本的なものは標準で用意されています。

独自の content view を作る

mimproxy はPythonで拡張できるので、オリジナルの content view も作れちゃいます!

公式のgithubリポジトリに実例がある
ので、そのコードを例に解説します。

この例は「リクエスト・レスポンスの中身の大文字小文字を入れ替えて表示」というものです。

custom_contentview.py
from mitmproxy import contentviews


# contentviews.View を継承したクラスを作る
class ViewSwapCase(contentviews.View):
    name = "swapcase"

    # CUIで起動した際に、この表示を適用するショートカットキーを指定
    prompt = ("swap case text", "z")

    content_types = ["text/plain"]

    # ここにメインの中身書き換え処理をいれる
    # data: リクエスト・レスポンスの中身
    # metadata: metadata["headers"] でHTTPヘッダを見ることができる
    def __call__(self, data, **metadata):
        return "case-swapped text", contentviews.format_text(data.swapcase())


view = ViewSwapCase()


def load(l):
    contentviews.add(view)


def done():
    contentviews.remove(view)

load と start

自分の手元のmitmproxyではこのままでは上手く読み込めませんでした。
mitmproxyのソースコードを見て色々やった結果 def load(l)def start() に変えることで読み込みに成功しました。

-def load(l):
+def start():
    contentviews.add(view)

mitmproxyのgithubをみると、途中で start から load に書き換えられているので、動かしているバージョンの違いみたいですね。

拡張スクリプトを入れた状態で起動する

mitmproxy (または mitmweb, mitmdump)コマンドの引数に -s をつけてスクリプトファイルのパスを追加すればOKです。

自分は Windows 環境で mitmproxy が使えないため mitmweb を使ってます。

mitmweb -s custom_contentview.py

これで、リクエスト・レスポンスの形式選択に swapcase が追加されていたら成功です。

image.png

参考リンク

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0