import sys from PyQt4 import QtCore, QtGui from MainWindow import Ui_MainWindow import SWProxy import threading import logging logger = logging.getLogger("SWProxy") class ProxyThread(QtCore.QThread): def __init__(self, ip, port, parent = None): QtCore.QThread.__init__(self, parent) self.ip = ip self.port = port def run(self): try: SWProxy.is_ip_port_valid(self.ip, self.port) logger.info("Running Proxy server at %s on port %s" % (self.ip, self.port)) p = SWProxy.HTTP(self.ip, self.port) p.run() except Exception as e: logger.info("Error running proxy server : %s" % e) print "Error running proxy server : %s" % e class MainWindow(QtGui.QMainWindow): def __init__(self, ip, port=8080, parent=None): QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.ipAddress.setText(ip) self.ui.proxyPort.setValue(port) self.ui.startProxy.clicked.connect(self.startStopProxy) self.ui.actionQuit.triggered.connect(self.quit) self.ui.actionAbout.triggered.connect(self.about) self.ui.actionOpen_PCAP.triggered.connect(self.openPCAP) self.proxy = None def quit(self): if self.proxy: self.proxy.terminate() self.proxy = None self.close() def about(self): QtGui.QMessageBox.about(self, "About", "SWProxy: Summoners War Proxy Tool\nWritten by KaKaRoTo\n\nLicensed under LGPLv3 and available at : \n\thttps://github.com/kakaroto/SWParser\n") def openPCAP(self): pcap_file = QtGui.QFileDialog.getOpenFileName() SWProxy.parse_pcap(pcap_file) def log(self, str): self.ui.logWindow.addItem(str) def startStopProxy(self): self.ui.proxyPort.setReadOnly(True) self.ui.proxyPort.setEnabled(False) self.ui.ipAddress.setReadOnly(True) self.ui.ipAddress.setEnabled(False) if self.proxy: self.ui.startProxy.setText("Start Proxy Server") self.ui.startProxy.setEnabled(False) self.proxy.terminate() else: self.ui.startProxy.setText("Stop Proxy Server") self.proxy = ProxyThread(self.ui.ipAddress.text(), self.ui.proxyPort.value(), parent=self) self.proxy.finished.connect(self.proxyStopped) self.proxy.start() def proxyStopped(self): self.proxy = None self.ui.ipAddress.setReadOnly(False) self.ui.ipAddress.setEnabled(True) self.ui.proxyPort.setReadOnly(False) self.ui.proxyPort.setEnabled(True) self.ui.startProxy.setEnabled(True) class GuiLogHandler(logging.Handler): def __init__(self, gui=None): logging.Handler.__init__(self) self.gui = gui def emit(self, record): msg = self.format(record) self.gui.log(msg)