1

良い一日、

mitmproxy をより大きなアプリケーションに実装しようとしています。そのためには、いわゆるインライン スクリプトを、コマンド ライン経由ではなくコード内にロードできる必要があります。ドキュメントには、それに関する役立つ情報が見つかりませんでした。

mitmproxy バージョン 0.17 と Python 2.7 を使用しています。

利用可能な新しいバージョンがあることは知っていますが、コード例を使用しても機能しませんでした。

これは私が持っている基本コードです:

from mitmproxy import controller, proxy
from mitmproxy.proxy.server import ProxyServer


class ProxyMaster(controller.Master):
    def __init__(self, server):
        controller.Master.__init__(self, server)

    def run(self):
        try:
            return controller.Master.run(self)
        except KeyboardInterrupt:
            self.shutdown()

    def handle_request(self, flow):
        flow.reply()

    def handle_response(self, flow):
        flow.reply()


config = proxy.ProxyConfig(port=8080)
server = ProxyServer(config)
m = ProxyMaster(server)
m.run()

インライン スクリプトを使用してこのプロキシを実行するにはどうすればよいですか?

前もって感謝します

4

1 に答える 1

0

私は本当に醜い回避策を考え出しました。

controller.Master を使用する代わりに、flow.FlowMaster をコントローラーとして使用する必要がありました。Master ライブラリはインライン スクリプトを処理できないようです。

何らかの理由で、ファイルをロードするだけでは機能しませんでした。それらはすぐにトリガーされますが、一致するフックを実行することによってではありません。

機能していないフックを使用する代わりに、handle_response でわかるように、一致する関数をロードしています (try/except が欠落しており、スレッド化が役立つ可能性があります)。

from mitmproxy import flow, proxy
from mitmproxy.proxy.server import ProxyServer
import imp


class ProxyMaster(flow.FlowMaster):
    def run(self):
        try:
            return flow.FlowMaster.run(self)
        except KeyboardInterrupt:
            self.shutdown()

    def handle_request(self, flow):
        flow.reply()

    def handle_response(self, flow):
        for inline_script in self.scripts:
            script_file = imp.load_source("response", inline_script.filename)
            script_file.response(self, flow)

        flow.reply()


proxy_config = proxy.ProxyConfig(port=8080)
server = ProxyServer(proxy_config)
state = flow.State()
m = ProxyMaster(server, state)

m.load_script("upsidedowninternet.py")
m.load_script("add_header.py")

m.run()

それを正しい方法で行うためのアイデアは大歓迎です。

于 2016-12-22T03:02:04.993 に答える