Есть ли способ запустить mitmproxy v.7.0. 2 программно в фоновом режиме?

#python #reverse-proxy #mitmproxy

Вопрос:

Есть ли способ запустить mitmproxy v.7.0. 2 программно в фоновом режиме? ProxyConfig и ProxyServer были удалены с версии 7.0.0, и приведенный ниже код не работает.

 from mitmproxy.options import Options
from mitmproxy.proxy.config import ProxyConfig
from mitmproxy.proxy.server import ProxyServer
from mitmproxy.tools.dump import DumpMaster

import threading
import asyncio
import time

class Addon(object):
    def __init__(self):
        self.num = 1

    def request(self, flow):
        flow.request.headers["count"] = str(self.num)

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


# see source mitmproxy/master.py for details
def loop_in_thread(loop, m):
    asyncio.set_event_loop(loop)  # This is the key.
    m.run_loop(loop.run_forever)


if __name__ == "__main__":
    options = Options(listen_host='0.0.0.0', listen_port=8080, http2=True)
    m = DumpMaster(options, with_termlog=False, with_dumper=False)
    config = ProxyConfig(options)
    m.server = ProxyServer(config)
    m.addons.add(Addon())

    # run mitmproxy in backgroud, especially integrated with other server
    loop = asyncio.get_event_loop()
    t = threading.Thread( target=loop_in_thread, args=(loop,m) )
    t.start()

    # Other servers, such as a web server, might be started then.
    time.sleep(20)
    print('going to shutdown mitmproxy')
    m.shutdown()
 

из сути БигСалли

Ответ №1:

Вы можете ввести свой Addon класс, your_script.py а затем запустить mitmdump -s your_script.py его . mitmdump поставляется без консольного интерфейса и может работать в фоновом режиме.

Мы (разработчики mitmproxy) официально больше не поддерживаем ручное создание экземпляров из Python, потому что это создает для нас огромное бремя поддержки. Если у вас есть некоторый опыт работы с Python, вы, вероятно, сможете найти свой путь.

Что делать, если у моего аддона есть дополнительные зависимости?

Подход 1: pip install mitmproxy по-прежнему отлично поддерживается и обеспечивает ту же функциональность, что и автономные двоичные файлы. Бонусный совет: Вы можете запустить venv/bin/mitmproxy или venv/Scripts/mitmproxy.exe вызвать mitmproxy в своем virtualenv без активации virtualenv.

Подход 2. Вы можете установить mitmproxy с pipx помощью, а затем запустить pipx inject mitmproxy <your dependency name> . Видишь https://docs.mitmproxy.org/stable/overview-installation/#installation-from-the-python-package-index-pypi для подробностей.

Как я могу отладить саму mitmproxy?

Если вы выполняете отладку из командной строки (будь то инструкции печати или pdb), самый простой подход-запустить mitmdump вместо mitmproxy , что обеспечивает ту же функциональность за вычетом интерфейса консоли. Кроме того, вы можете использовать функцию удаленной отладки PyCharm, которая также работает при активном интерфейсе консоли (https://github.com/mitmproxy/mitmproxy/blob/main/examples/contrib/remote-debug.py).

Комментарии:

1. Спасибо за комментарий. Если вашему собственному сценарию нужны другие библиотеки, которые вы обычно устанавливаете в виртуальной среде, как это рекомендуется сделать с помощью mitmproxy сейчас? Кроме того, есть ли еще какой-то способ написать код в графическом интерфейсе, таком как pycharm, и иметь доступ к отладчику?

2. Я расширил свой ответ, см. выше. 🙂