You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
2.5 KiB

7 months ago
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
import os
import time
import string
class CustomFTPHandler(FTPHandler):
def on_connect(self):
super().on_connect()
self.username = "user"
print("Cliente conectado.")
def on_login(self, username):
super().on_login(username)
self.username = username
self.user_dir = os.path.join(self.authorizer.get_home_dir(username), 'inbox')
# Send the default server directory path to the client
default_server_dir = "/home/eric/ProyectoJuanjoSegundoTrimestre/usuario" # Cambiar esto al directorio predeterminado
self.send_response("DEFAULT_DIR", default_server_dir)
print(f"Directorio predeterminado del servidor enviado al cliente: {default_server_dir}")
def send_response(self, code, message):
resp = f"{code} {message}\r\n"
self.push(resp)
def on_file_sent(self, file):
super().on_file_sent(file)
self.broadcast_file_sent(os.path.basename(file))
def broadcast_file_sent(self, filename):
print(f"File '{filename}' sent")
def list_files_in_user_inbox(self):
files = []
try:
files = os.listdir(self.user_dir)
except FileNotFoundError:
pass
return files
def normalize_filename(self, filename):
valid_chars = "-_.() %s%s" % (string.ascii_letters, string.digits)
filename = ''.join(c for c in filename if c in valid_chars)
filename = filename[:255] # Limit filename length to 255 characters
return filename
def save_file(self, filename, data):
try:
filename = self.normalize_filename(filename)
with open(os.path.join(self.user_dir, filename), 'wb') as file:
file.write(data)
print(f"File '{filename}' saved to {self.username}'s inbox.")
except Exception as e:
print(f"Error saving file: {e}")
def run_ftp_server():
authorizer = DummyAuthorizer()
# Creamos un único usuario
authorizer.add_user("user", "password", "/home/eric/ProyectoJuanjoSegundoTrimestre/usuario", perm="lradw") # Cambia "/path/to/home/directory" al directorio que desees
handler = CustomFTPHandler
handler.authorizer = authorizer
server = FTPServer(("127.0.0.1", 12345), handler)
server.max_cons_per_ip = 5
server.serve_forever()
if __name__ == "__main__":
run_ftp_server()

Powered by INFORMATICA.FP.EDU.ES.