MITMProxy with GUI

34 Views Asked by At

Is it possible to run mitmproxy with pyqt5 GUI app? It just freezes my app

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from multiprocessing import Process

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("My Window")
        self.setGeometry(100, 100, 400, 200)

def start_mitmdump():
    from mitmproxy.tools.main import mitmdump
    mitmdump(['-q', '-s', __file__, '--ssl-insecure'])

if __name__ == '__main__':
    # Start mitmdump in a separate process
    mitm_process = Process(target=start_mitmdump)
    mitm_process.start()

    # Start PyGUI application
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()

    # Wait for the mitmdump process to finish
    mitm_process.join()

    # Exit the application
    sys.exit(app.exec_())

I have tried doing this but it returns an error

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from threading import Thread

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("My Window")
        self.setGeometry(100, 100, 400, 200)

def start_mitmdump():
    from mitmproxy.tools.main import mitmdump
    mitmdump(['-q', '-s', __file__, '--ssl-insecure'])

if __name__ == '__main__':
    # Start mitmdump in a separate thread
    mitm_thread = Thread(target=start_mitmdump)
    mitm_thread.daemon = True  
    mitm_thread.start()

    # Start PyGUI application
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()

    # Start the Qt event loop
    sys.exit(app.exec_())

Traceback (most recent call last): File "C:\Program Files\Python311\Lib\threading.py", line 1045, in _bootstrap_inner self.run() File "C:\Program Files\Python311\Lib\threading.py", line 982, in run self._target(*self._args, **self._kwargs) File "D:\python new\ProxyGUI\mitm_mre.py", line 13, in start_mitmdump mitmdump(['-q', '-s', file, '--ssl-insecure']) File "C:\Users\User\AppData\Roaming\Python\Python311\site-packages\mitmproxy\tools\main.py", line 150, in mitmdump run(dump.DumpMaster, cmdline.mitmdump, args, extra) File "C:\Users\User\AppData\Roaming\Python\Python311\site-packages\mitmproxy\tools\main.py", line 127, in run return asyncio.run(main()) ^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\Python311\Lib\asyncio\runners.py", line 190, in run return runner.run(main) ^^^^^^^^^^^^^^^^ File "C:\Program Files\Python311\Lib\asyncio\runners.py", line 118, in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\Python311\Lib\asyncio\base_events.py", line 654, in run_until_complete return future.result() ^^^^^^^^^^^^^^^ File "C:\Users\User\AppData\Roaming\Python\Python311\site-packages\mitmproxy\tools\main.py", line 121, in main signal.signal(signal.SIGINT, _sigint) File "C:\Program Files\Python311\Lib\signal.py", line 58, in signal handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ValueError: signal only works in main thread of the main interpreter

0

There are 0 best solutions below