-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.py
More file actions
87 lines (71 loc) · 3.62 KB
/
server.py
File metadata and controls
87 lines (71 loc) · 3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
__author__ = "K9 & Alon"
import event_handler
from utils import Connection, DataType, NetworkUtils, Event
import socket
import threading
from constants import Options, Events
from terminal import Terminal
import time
class ControlledPC:
def __init__(self) -> None:
self.clients: list[Connection] = []
Terminal.info("Initializing server socket...")
self.server_s = socket.socket()
self.server_s.bind(("0.0.0.0", Options.PORT))
self.server_s.listen(Options.MAX_CONNECTED)
Terminal.info(f"Server started on port {Options.PORT}")
self.open = True
Terminal.info("Adding event listeners...")
NetworkUtils.add_listener(Events.Screenshot_Request, event_handler.ScreenshotRequestEvent)
NetworkUtils.add_listener(Events.FileContent_Request, event_handler.FileRequestEvent)
NetworkUtils.add_listener(Events.UnknownEvent, event_handler.UnknownEvent)
NetworkUtils.add_listener(Events.ConnectionClosed, event_handler.ConnectionClosedEvent)
NetworkUtils.add_listener(Events.FileList_Request, event_handler.FileListRequestEvent)
NetworkUtils.add_listener(Events.CopyFile_Request, event_handler.FileCopyRequestEvent)
NetworkUtils.add_listener(Events.MoveFile_Request, event_handler.FileMoveRequestEvent)
NetworkUtils.add_listener(Events.FileChunkUpload_Action, event_handler.FileChunkUploadEvent, DataType.Raw)
NetworkUtils.add_listener(Events.CommandRun_Request, event_handler.CommandRunRequestEvent)
NetworkUtils.add_listener(Events.RemoveFile_Request, event_handler.FileRemoveEventRequest)
NetworkUtils.add_listener(Events.ScreenControl_Request, event_handler.ScreenControlRequestEvent)
NetworkUtils.add_listener(Events.ScreenWatch_Request, event_handler.ScreenWatchRequestEvent)
NetworkUtils.add_listener(Events.ScreenControlDisconnect_Action, event_handler.ScreenControlDisconnectEvent)
NetworkUtils.add_listener(Events.ScreenWatchDisconnect_Action, event_handler.ScreenControlDisconnectEvent)
Terminal.info("14 event listeners added!")
def handle_exit(self):
Terminal.info("Closing server socket...")
self.open = False
self.server_s.close()
Terminal.info("Disconnecting clients...")
for client in self.clients:
client.disconnect()
Terminal.success("Server closed successfully!")
exit(0)
def handle_client(self, client: Connection):
client.initiate_key_switch()
NetworkUtils.listen_for_events(client)
def start_accept_clients(self):
Terminal.info("\nWaiting for clients to connect...")
self.server_s.settimeout(0.5)
while self.open:
try:
soc, addr = self.server_s.accept()
except socket.timeout:
continue
if len(self.clients) >= Options.MAX_CONNECTED:
Terminal.warning(f"Client ({addr[0]}:{addr[1]}) tried to connect but the server is full!")
continue
Terminal.info(f"Client connected: {addr[0]}:{addr[1]}")
client = Connection(soc, addr)
self.clients.append(client)
threading.Thread(target=self.handle_client, args=(client, ), daemon=True).start()
if __name__ == "__main__":
Terminal.clear()
Terminal.logo()
Terminal.info("Starting server...")
time.sleep(1)
cpc = ControlledPC()
Terminal.success("Server started successfully!")
try:
cpc.start_accept_clients()
except KeyboardInterrupt:
cpc.handle_exit()