Mitmproxy как запускать из скрипта и сохранять дампы в файл

Я пытаюсь найти способ запустить Mitmproxy из скрипта Python (что я и сделал) и сохранить любой трафик в файл дампа (с чем мне нужна помощь).

Погуглив, посмотрев на проблемы gitmproxy 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, я вижу, что надстройка сохранения в файл загружена, но я не понимаю, как получить к ней доступ, чтобы любой трафик, проходящий через прокси-сервер, независимо от того, является ли это запросом, ответом, ws или tcp можно записать в файл дампа

Спасибо!

Вот отредактированный список загружаемых дополнений

  • Объект mitmproxy.addons.streambodies.StreamBodies по адресу 0x111542da0>
  • mitmproxy.addons.save.Сохранить объект по адресу 0x111542dd8>
  • Объект mitmproxy.addons.upstream_auth.UpstreamAuth по адресу 0x111542e10>

person securisec    schedule 31.08.2018    source источник


Ответы (2)


просто добавьте эти 2 строки после 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, "")
person ca-za    schedule 21.11.2018

ваш фрагмент кода уже запускает рабочий прокси. Однако возможность сохранять записанный трафик в файл во время выполнения (save_stream_file) является частью Save — аддон, который загружается по умолчанию после DumpMaster. Поэтому вам необходимо установить параметр save_stream_file после создания экземпляра DumpMaster. Мне потребовалось некоторое время, чтобы понять это, но это сработало для меня, сохранив ваш выходной поток в файл с именем 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()

Надеюсь, это сработает и для вас!

person Jogogoloboy    schedule 13.05.2020