【问题标题】:Mitmproxy how to launch from script, and save dumps to fileMitmproxy 如何从脚本启动,并将转储保存到文件
【发布时间】:2018-08-31 00:32:19
【问题描述】:

我正在尝试找出一种从 python 脚本启动 Mitmproxy 的方法(我已经完成)并将所有流量保存到转储文件(我需要帮助)。

通过谷歌搜索,查看 mitmproxy git 问题并阅读示例代码,这是我目前所拥有的:

from mitmproxy import proxy, options
from mitmproxy.tools.dump import DumpMaster
from mitmproxy.addons import core


class AddHeader:
    def __init__(self):
        self.num = 0

    def response(self, flow):
        self.num = self.num + 1
        print(self.num)
        flow.response.headers["count"] = str(self.num)


addons = [
    AddHeader()
]

opts = options.Options(listen_host='127.0.0.1', listen_port=8080)
pconf = proxy.config.ProxyConfig(opts)

m = DumpMaster(None)
m.server = proxy.server.ProxyServer(pconf)
# print(m.addons)
m.addons.add(addons)
print(m.addons)
# m.addons.add(core.Core())

try:
    m.run()
except KeyboardInterrupt:
    m.shutdown()

问题是,这会产生一个错误AttributeError: No such option: body_size_limit,这似乎可以用master.addons.add(core.Core) 缓解,但这个核心插件已经存在于 DumpMaster 中,因此会引发不同的错误。

检查当前由DumpMaster 加载的插件我确实看到保存到文件插件已加载,但我不清楚如何访问它以便通过代理的任何流量,无论它是否是请求、response、ws 或 tcp 可以写入转储文件

谢谢!

这是已加载插件的编辑列表

  • mitmproxy.addons.streambodies.StreamBodies 对象位于 0x111542da0>
  • mitmproxy.addons.save.Save 对象在 0x111542dd8>
  • mitmproxy.addons.upstream_auth.UpstreamAuth 对象位于 0x111542e10>

【问题讨论】:

    标签: python-3.x mitmproxy


    【解决方案1】:

    只需在 opts = options.Options(listen_host='127.0.0.1', listen_port=8080) 之后添加这两行

    opts.add_option("body_size_limit", int, 0, "")
    opts.add_option("keep_host_header", bool, True, "")
    

    【讨论】:

      【解决方案2】:

      您的代码 sn-p 已经运行了一个工作代理。但是,在运行时将记录的流量转储到文件中的选项 (save_stream_file) 是 Save-Addon 的一部分,默认情况下 DumpMaster 实例创建之后加载。因此,您需要在创建DumpMaster 实例后设置save_stream_file 选项。我也花了一些时间才弄明白,但这对我有用,将您的输出流保存到一个名为 traffic_stream 的文件中:

          from mitmproxy import proxy, options
          from mitmproxy.tools.dump import DumpMaster
      
          opts = options.Options(listen_port=8081)
          opts.add_option("body_size_limit", int, 0, "")
          pconf = proxy.config.ProxyConfig(opts)
      
          m = DumpMaster(None)
          m.server = proxy.server.ProxyServer(pconf)
          m.options.set('save_stream_file=traffic_stream')
      
          try:
              m.run()
          except KeyboardInterrupt:
              m.shutdown()
      

      希望它也对你有用!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-22
        • 2022-10-20
        • 2023-03-25
        • 1970-01-01
        • 2020-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多