Merge branch 'feature/limitConnections' into dev
This commit is contained in:
@ -19,7 +19,7 @@ from tkinter.messagebox import showwarning, showinfo
|
||||
__author__ = "HorlogeSkynet"
|
||||
__copyright__ = "Copyright 2017, ACMS"
|
||||
__license__ = "GPLv3"
|
||||
__version__ = "0.1.8"
|
||||
__version__ = "0.1.10"
|
||||
__status__ = "Development"
|
||||
__date__ = "02/22/2017"
|
||||
|
||||
@ -190,6 +190,10 @@ if __name__ == '__main__':
|
||||
except ConnectionRefusedError:
|
||||
showwarning("Connection has failed !", "No server seems running on " + serverIP + ':' + str(serverPort) + "...")
|
||||
|
||||
except (ConnectionResetError, OSError):
|
||||
showwarning("Your IP is blacklisted !", "Too many connections have been received from your IP on " + serverIP + ':' + str(serverPort) + "...")
|
||||
quit()
|
||||
|
||||
finally:
|
||||
messageBox.destroy()
|
||||
|
||||
@ -223,7 +227,9 @@ if __name__ == '__main__':
|
||||
currentWorkingDir = recvData()
|
||||
if currentWorkingDir.startswith('NEW_PATH:'):
|
||||
currentWorkingDir = currentWorkingDir.split(':', 1)[1]
|
||||
|
||||
else:
|
||||
print("Received from server: \"" + currentWorkingDir + '\"\n')
|
||||
quit()
|
||||
|
||||
# Usage procedure
|
||||
|
@ -22,11 +22,15 @@ from fileCommands import DATA_PATH, listFiles, changeDirectory, makeDirectory, m
|
||||
__authors__ = "HorlogeSkynet, Tatiyk"
|
||||
__copyright__ = "Copyright 2017, ACMS"
|
||||
__license__ = "GPLv3"
|
||||
__version__ = "0.1.13"
|
||||
__version__ = "0.1.16"
|
||||
__status__ = "Development"
|
||||
__date__ = "02/22/2017"
|
||||
|
||||
|
||||
MAX_SESSIONS_PER_USER = 2
|
||||
MAX_NUMBER_CLIENTS_PER_IP = 2
|
||||
|
||||
|
||||
################
|
||||
# Client class #
|
||||
################
|
||||
@ -44,6 +48,8 @@ class ClientThread(threading.Thread):
|
||||
self.HOME_DIR = DATA_PATH
|
||||
self.currentWorkingDir = ''
|
||||
|
||||
self.username = ''
|
||||
|
||||
def run(self):
|
||||
clients.append(self)
|
||||
|
||||
@ -94,8 +100,15 @@ class ClientThread(threading.Thread):
|
||||
sendData(self.sock, "AUTHENTICATION_ERROR")
|
||||
continue
|
||||
|
||||
self.checkAndSetHomeDir(login[1])
|
||||
sendData(self.sock, 'NEW_PATH:' + '/' + self.currentWorkingDir.partition(DATA_PATH)[2])
|
||||
self.username = login[1]
|
||||
|
||||
# Contain session number here
|
||||
if [client.username for client in clients].count(self.username) > MAX_SESSIONS_PER_USER:
|
||||
sendData(self.sock, 'ERROR: Too many sessions are already opened for this account.')
|
||||
|
||||
else:
|
||||
self.checkAndSetHomeDir()
|
||||
sendData(self.sock, 'NEW_PATH:' + '/' + self.currentWorkingDir.partition(DATA_PATH)[2])
|
||||
|
||||
# Usage procedure #
|
||||
while True:
|
||||
@ -113,15 +126,15 @@ class ClientThread(threading.Thread):
|
||||
|
||||
clients.remove(self)
|
||||
|
||||
def checkAndSetHomeDir(self, login):
|
||||
def checkAndSetHomeDir(self):
|
||||
tmp = self.HOME_DIR
|
||||
self.HOME_DIR += login + '/'
|
||||
self.HOME_DIR += self.username + '/'
|
||||
if not os.path.exists(self.HOME_DIR):
|
||||
try:
|
||||
os.mkdir(self.HOME_DIR)
|
||||
|
||||
except:
|
||||
print("Cannot create home directory for " + login)
|
||||
print("Cannot create home directory for " + self.username)
|
||||
self.currentWorkingDir = tmp
|
||||
return
|
||||
self.currentWorkingDir = self.HOME_DIR
|
||||
@ -233,6 +246,11 @@ if __name__ == '__main__':
|
||||
# We wait and accept each entering connection
|
||||
sock, (address, port) = listenSock.accept()
|
||||
|
||||
# Limit DDoS here
|
||||
if [client.address for client in clients].count(address) + 1 > MAX_NUMBER_CLIENTS_PER_IP:
|
||||
sock.close()
|
||||
continue
|
||||
|
||||
# Creates a SSL socket from the one that has just been set up above
|
||||
sockSSL = ssl.wrap_socket(sock, server_side=True, certfile="Server/Credentials/server.crt", keyfile="Server/Credentials/server.key")
|
||||
|
||||
|
Reference in New Issue
Block a user