【问题标题】:mitmproxy load script using API (Python)mitmproxy 使用 API (Python) 加载脚本
【发布时间】:2016-12-21 00:03:42
【问题描述】:

早安,

我正在尝试将 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()

如何使用内联脚本运行此代理?

提前致谢

【问题讨论】:

    标签: python python-2.7 proxy mitmproxy


    【解决方案1】:

    我想出了一个非常丑陋的解决方法。

    我不得不使用 flow.FlowMaster 作为控制器,而不是使用 controller.Master。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()
    

    感谢任何关于以正确方式做事的想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多