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

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.