mirror of
https://github.com/maxDcb/C2TeamServer
synced 2026-06-06 16:14:27 +00:00
110 lines
3.0 KiB
Python
110 lines
3.0 KiB
Python
import sys
|
|
import signal
|
|
import argparse
|
|
from threading import Thread, Lock
|
|
from PyQt5.QtWidgets import *
|
|
from PyQt5.QtGui import *
|
|
from PyQt5.QtCore import *
|
|
|
|
from grpcClient import *
|
|
from ListenerPanel import *
|
|
from SessionPanel import *
|
|
from ConsolePanel import *
|
|
from GraphPanel import *
|
|
|
|
import qdarktheme
|
|
|
|
|
|
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
|
|
|
|
|
class App(QMainWindow):
|
|
|
|
def __init__(self, ip, port, devMode):
|
|
super().__init__()
|
|
|
|
self.ip = ip
|
|
self.port = port
|
|
self.devMode = devMode
|
|
|
|
self.createPayloadWindow = None
|
|
|
|
self.title = 'Exploration C2'
|
|
self.left = 0
|
|
self.top = 0
|
|
self.width = 1000
|
|
self.height = 1000
|
|
self.setWindowTitle(self.title)
|
|
self.setGeometry(self.left, self.top, self.width, self.height)
|
|
|
|
central_widget = QWidget()
|
|
self.setCentralWidget(central_widget)
|
|
|
|
config_button = QPushButton("Payload")
|
|
config_button.clicked.connect(self.payloadForm)
|
|
|
|
self.mainLayout = QGridLayout(central_widget)
|
|
self.mainLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.mainLayout.setRowStretch(1, 3)
|
|
self.mainLayout.setRowStretch(2, 7)
|
|
|
|
self.topLayout()
|
|
self.botLayout()
|
|
|
|
self.sessionsWidget.interactWithSession.connect(self.consoleWidget.addConsole)
|
|
|
|
self.show()
|
|
|
|
|
|
def topLayout(self):
|
|
|
|
self.topWidget = QTabWidget()
|
|
|
|
self.m_main = QWidget()
|
|
|
|
self.m_main.layout = QHBoxLayout(self.m_main)
|
|
self.m_main.layout.setContentsMargins(0, 0, 0, 0)
|
|
self.sessionsWidget = Sessions(self, self.ip, self.port, self.devMode)
|
|
self.m_main.layout.addWidget(self.sessionsWidget)
|
|
self.listenersWidget = Listeners(self, self.ip, self.port, self.devMode)
|
|
self.m_main.layout.addWidget( self.listenersWidget)
|
|
|
|
self.topWidget.addTab(self.m_main, "Main")
|
|
|
|
self.graphWidget = Graph(self, self.ip, self.port, self.devMode)
|
|
self.topWidget.addTab(self.graphWidget, "Graph")
|
|
|
|
self.mainLayout.addWidget(self.topWidget, 1, 1, 1, 1)
|
|
|
|
|
|
def botLayout(self):
|
|
|
|
self.consoleWidget = ConsolesTab(self, self.ip, self.port, self.devMode)
|
|
self.mainLayout.addWidget(self.consoleWidget, 2, 0, 1, 2)
|
|
|
|
|
|
def __del__(self):
|
|
print("Exit")
|
|
|
|
|
|
def payloadForm(self):
|
|
if self.createPayloadWindow is None:
|
|
self.createPayloadWindow = CreatePayload()
|
|
self.createPayloadWindow.show()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
parser = argparse.ArgumentParser(description='TeamServer IP and port.')
|
|
parser.add_argument('--ip', default='127.0.0.1', help='IP address (default: 127.0.0.1)')
|
|
parser.add_argument('--port', type=int, default=50051, help='Port number (default: 50051)')
|
|
parser.add_argument('--dev', action='store_true', help='Enable developer mode to disable the SSL hostname check.')
|
|
|
|
args = parser.parse_args()
|
|
|
|
app = QApplication(sys.argv)
|
|
app.setStyleSheet(qdarktheme.load_stylesheet())
|
|
|
|
ex = App(args.ip, args.port, args.dev)
|
|
sys.exit(app.exec_())
|