@@ -37,9 +37,47 @@ def ftp_client(argvs):
37
37
username = argvs .username
38
38
password = argvs .password
39
39
command = argvs .command
40
- argument = argvs .argument
40
+ argument1 = argvs .argument1
41
+ argument2 = argvs .argument2
41
42
use_tls = argvs .use_tls # Nuevo argumento para usar o no TLS
42
43
44
+ # Diccionario de delegados para los comandos FTP
45
+ command_delegates = {
46
+ "USER" : lambda : f"USER { argument1 } \r \n " ,
47
+ "PASS" : lambda : f"PASS { argument1 } \r \n " ,
48
+ "ACCT" : lambda : f"ACCT { argument1 } \r \n " ,
49
+ "CWD" : lambda : f"CWD { argument1 } \r \n " ,
50
+ "CDUP" : lambda : f"CDUP\r \n " ,
51
+ "SMNT" : lambda : f"SMNT { argument1 } \r \n " ,
52
+ "REIN" : lambda : f"REIN\r \n " ,
53
+ "QUIT" : lambda : f"QUIT\r \n " ,
54
+ "PORT" : lambda : f"PORT { argument1 } \r \n " ,
55
+ "PASV" : lambda : f"PASV\r \n " ,
56
+ "TYPE" : lambda : f"TYPE { argument1 } \r \n " ,
57
+ "STRU" : lambda : f"STRU { argument1 } \r \n " ,
58
+ "MODE" : lambda : f"MODE { argument1 } \r \n " ,
59
+ "RETR" : lambda : f"RETR { argument1 } \r \n " ,
60
+ "STOR" : lambda : f"STOR { argument1 } { argument2 } \r \n " ,
61
+ "STOU" : lambda : f"STOU\r \n " ,
62
+ "APPE" : lambda : f"APPE { argument1 } \r \n " ,
63
+ "ALLO" : lambda : f"ALLO { argument1 } \r \n " ,
64
+ "REST" : lambda : f"REST { argument1 } \r \n " ,
65
+ "RNFR" : lambda : f"RNFR { argument1 } \r \n " ,
66
+ "RNTO" : lambda : f"RNTO { argument2 } \r \n " ,
67
+ "ABOR" : lambda : f"ABOR\r \n " ,
68
+ "DELE" : lambda : f"DELE { argument1 } \r \n " ,
69
+ "RMD" : lambda : f"RMD { argument1 } \r \n " ,
70
+ "MKD" : lambda : f"MKD { argument1 } \r \n " ,
71
+ "PWD" : lambda : f"PWD\r \n " ,
72
+ "LIST" : lambda : f"LIST { argument1 } \r \n " ,
73
+ "NLST" : lambda : f"NLST { argument1 } \r \n " ,
74
+ "SITE" : lambda : f"SITE { argument1 } \r \n " ,
75
+ "SYST" : lambda : f"SYST\r \n " ,
76
+ "STAT" : lambda : f"STAT { argument1 } \r \n " ,
77
+ "HELP" : lambda : f"HELP { argument1 } \r \n " ,
78
+ "NOOP" : lambda : f"NOOP\r \n " ,
79
+ }
80
+
43
81
try :
44
82
# Conecta al servidor
45
83
client_socket = connect_to_server (server , port , use_tls )
@@ -59,12 +97,8 @@ def ftp_client(argvs):
59
97
# Verifica si la autenticación fue exitosa
60
98
if "230" in pass_response : # Código 230: Usuario autenticado
61
99
# Ejecuta el comando solicitado
62
- if command == "DELE" :
63
- command_response = send_command (client_socket , f"DELE { argument } \r \n " )
64
- elif command == "MKD" :
65
- command_response = send_command (client_socket , f"MKD { argument } \r \n " )
66
- elif command == "RMD" :
67
- command_response = send_command (client_socket , f"RMD { argument } \r \n " )
100
+ if command in command_delegates :
101
+ command_response = send_command (client_socket , command_delegates [command ]())
68
102
else :
69
103
command_response = json .dumps ({"status" : "500" , "message" : "Comando no soportado" }, indent = 4 )
70
104
@@ -81,12 +115,13 @@ def ftp_client(argvs):
81
115
if __name__ == "__main__" :
82
116
# Configura el parser de argumentos
83
117
parser = argparse .ArgumentParser (description = "Cliente FTP en Python" )
118
+ parser .add_argument ("-p" , "--port" , type = int , default = 21 , help = "Puerto del servidor FTP" )
84
119
parser .add_argument ("-H" , "--host" , required = True , help = "Dirección del servidor FTP" )
85
- parser .add_argument ("-P" , "--port" , type = int , default = 21 , help = "Puerto del servidor FTP" )
86
120
parser .add_argument ("-u" , "--username" , required = True , help = "Nombre de usuario" )
87
121
parser .add_argument ("-w" , "--password" , required = True , help = "Contraseña" )
88
- parser .add_argument ("-c" , "--command" , required = True , help = "Comando a ejecutar (DELE, MKD, RMD)" )
89
- parser .add_argument ("-a" , "--argument" , required = True , help = "Argumento del comando" )
122
+ parser .add_argument ("-c" , "--command" , required = True , help = "Comando a ejecutar" )
123
+ parser .add_argument ("-a" , "--argument1" , required = False , help = "Primer argumento del comando" )
124
+ parser .add_argument ("-b" , "--argument2" , required = False , help = "Segundo argumento del comando" )
90
125
parser .add_argument ("--use_tls" , action = "store_true" , help = "Usar TLS/SSL para la conexión" )
91
126
92
127
# Parsea los argumentos
0 commit comments