telnetServer.py (4309B)
1import socket
2import threading
3import random
4import os
5import utility
6import subprocess
7import pyautogui
89
parentDir = utility.getpath()
1011
# get server IP
12IP = utility.get_ip_address()
13PORT = 5566
14ADDR = (IP, PORT)
15SIZE = 1024
16FORMATmsg = "utf-8"
1718
u_name = [] # list of usernames
19u_addr = [] # list of ip addresses
20u_conn = [] # list of connections
21u_pin = [] # list of pins
22u_port = [] # list of ports
2324
25
# server functions
26def start():
27global server
2829
print(f"SERVER IP = {IP}\n")
30print("[STARTING] Server is starting...")
31server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
32server.bind(ADDR)
33server.listen()
34print(f"[LISTENING] Server is listening on {IP}:{PORT}")
3536
# broadcast connection list
37def broadcast(message):
38if message == 'LIST':
39for addr in u_conn:
40msg = str(u_name)
41msg = "[LIST] CONNECTION LIST: " + msg
42addr.send(msg.encode(FORMATmsg))
43msg = str(u_port)
44msg = "[LIST] CONNECTION LIST: " + msg
45addr.send(msg.encode(FORMATmsg))
46else:
47for addr in u_conn:
48addr.send(message.encode(FORMATmsg))
4950
def exec_cmd(msg):
51result = executeCommand(msg)
52print(f'Output: {result}')
53broadcast(result)
5455
def handle_client(conn, addr, u_name):
56print(f"[SERVER] [NEW CONNECTION] {u_name}:{addr} connected.")
5758
connected = True
59while connected:
60msg = conn.recv(SIZE).decode(FORMATmsg)
6162
print('[Incoming request]: ')
63print(f"[{u_name}:{addr}] {msg}") # print msg in server console
6465
print('Executing command...')
66# str = input()
67# print(str)
68str = msg
69# if str == "exit()":
70# exit()
71if str[0]=="!" and str[1]!="!":
72str = str.replace("`", "\n")
73pyautogui.write(str[1:], interval = 0.05)
74continue
75if str[0]== '!' and str[1 == '!']:
76spl = str[2:].split('~')
77if len(spl)==1:
78pyautogui.hotkey(spl[0])
79continue
80if len(spl)==2:
81pyautogui.hotkey(spl[0], spl[1])
82continue
8384
Thr = threading.Thread(target=exec_cmd, args=(msg,))
85Thr.start()
8687
conn.close()
8889
def executeCommand(command):
90result = os.popen(command).read()
91return result
9293
def startVideoStream():
94print('\nStarting video stream...')
95process = subprocess.Popen(['cmd', '/C', 'streamVideo.bat'], creationflags= subprocess.CREATE_NEW_CONSOLE)
9697
print(f'Video Stream: Path: http://{IP}:5000')
9899
def main():
100utility.printUI()
101start()
102startVideoStream()
103104
temp_port = PORT+1
105while True:
106conn, addr = server.accept()
107while True:
108temp_name = conn.recv(SIZE).decode(FORMATmsg)
109print(f"[CLIENT] Username: {temp_name}")
110if temp_name in u_name:
111print("[SERVER] Username not accepted")
112conn.send("NOTACCEPTED!".encode(FORMATmsg))
113else:
114print("[SERVER] Username accepted")
115conn.send(temp_name.encode(FORMATmsg))
116break
117118
temp_pin = str(random.randint(1000, 9999))
119print(f"[AUTHENTICATING] Current Pin: {temp_pin}")
120msg_pin = conn.recv(SIZE).decode(FORMATmsg)
121122
if msg_pin != temp_pin:
123print("[SERVER] PIN not accepted")
124conn.send("try again".encode(FORMATmsg))
125continue
126else:
127print("[SERVER] PIN accepted")
128conn.send("!ACCEPTED".encode(FORMATmsg))
129130
131
conn.recv(SIZE).decode(FORMATmsg)
132conn.send(str(temp_port).encode(FORMATmsg))
133134
print(f"[SERVER] {temp_name} added to network")
135136
137
clientThread = threading.Thread(target=handle_client, args=(conn, addr, temp_name))
138clientThread.start()
139140
141
u_pin.append(temp_pin)
142u_name.append(temp_name)
143u_addr.append(addr)
144u_conn.append(conn)
145u_port.append(temp_port)
146temp_port += 1
147148
# broadcast connection list
149broadcast('LIST')
150151
print(f"\n[SERVER][ACTIVE CONNECTIONS] {threading.active_count() - 2}")
152pass
153154
155
if __name__ == "__main__":
156main()