Se trata de un cliente ftp, que permite investigar los directorios, subir y descargar archivos, sin interfaz gráfica pero considero, que sigue siendo un entorno bastante amigable
Aquí os dejo el código:
Código
#!/usr/bin/env python import ftplib,os def darchivos(f): # Funcion encargada de descargar archivos del servidor eleccion = "SI" while eleccion != "NO" and eleccion == "SI": try: os.system("clear") print " [+] Panel de Descargas [+]\n" print "[+] Directorios y Archivos\n " for x in f.nlst(): print x print " \n [/]Inserte el nombre del archivo a descargar" archivoserv = raw_input("Nombre>") print "\n[+]Ahora inserte el nombre del archivo para guardar en su sistema" archivodir = raw_input("Nombre>") t = open(archivodir,"wb") print "Descargando..." f.retrbinary('RETR %s' %archivoserv,t.write) print "[+]!Descarga completada con exito!" print "[/] Quiere seguir descargando?" eleccion = raw_input("Si o No?") eleccion = eleccion.upper() if eleccion == 'NO': print "Pulse cualquier tecla para salir" raw_input() f.quit() f.close() if eleccion != 'NO' and eleccion != 'SI': print "[-] Eleccion no valida" raw_input() darchivos(f) except: print "[-]No se ha podido descargar el archivo, compruebe la insercion del nombre y la validez del archivo" raw_input() os.system("clear") for p in f.nlst(): print p darchivos(f) def archivos(f): # Funcion encargada de subir archivos al servidor eleccion = 'SI' while eleccion == 'SI' and eleccion != 'NO': try: os.system("clear") print " [+] Panel de Subidas [+]\n" print "[+] Directorios y Archivos\n " for sp in f.nlst(): print sp print "\n[+] Inserte el nombre del archivo a subir junto con su directorio" archivo_origen = raw_input("Nombre>") t = open(archivo_origen,'rb') except: print "[-] Error,el archivo no existe,retornando" raw_input() os.system("clear") archivos(f) print "\n[+] Inserte ahora el nombre que tomara el archivo en el servidor" archivo_destino = raw_input("Nombre>") try: f.storbinary('STOR %s' %archivo_destino,t) print "[+] Subida completada con exito!" print "[/] Quiere seguir descargando?" eleccion = raw_input("Si o No?") eleccion = eleccion.upper() if eleccion == 'NO': print "Pulse cualquier tecla para salir" raw_input() f.quit() f.close() if eleccion != 'NO' and eleccion != 'SI': print "[-] Eleccion no valida" raw_input() archivos(f) f.quit() f.close() except: print "[-] No se ha podido subir el archivo, retornando" raw_input() os.system("clear") archivos(f) def mostrar_directorios(f): # Funcion que recorre los directorios del servidor try: os.system("clear") print "[+] Directorios y Arhivos\n" for x in f.nlst(): print x print "\n[/] Elija directorio" directorio = raw_input("Directorio>") f.cwd(directorio) os.system("clear") except: print "[-] El directorio introducido no es valido retornando" raw_input() os.system("clear") f.quit() f.close() main() print "[+] Directorios y Archivos ",directorio,"\n\n" for x in f.nlst(): print x print "\n[/] Desea investigar otro directorio?" eleccion = raw_input("Si o No?>") eleccion = eleccion.upper() if eleccion == 'SI': while eleccion == 'SI': try: print "[/] Elija Directorio:" directoriox = raw_input("Directorio>") f.cwd(directoriox) os.system("clear") print "[+] Directorios y Archivos ",directoriox,"\n\n" for s in f.nlst(): print s except: print "[-] El nombre introducido no existe o no es un directorio,retornando" raw_input() os.system("clear") main() print "\n[/] Desea investigar otro directorio?" eleccion = raw_input("Si o No?>") eleccion = eleccion.upper() if eleccion == 'NO': print "\n[+] Que funcion quiere llevar a cabo?" print "--> Subir Archivos (Subir)" print "--> Descargar Archivos (Descargar)" eleccion3 = raw_input("Eleccion>") eleccion3 = eleccion3.upper() if eleccion3 == "SUBIR": archivos(f) elif eleccion3 == "DESCARGAR": darchivos(f) else: print "[-] El valor introducido no es valido" raw_input() os.system("clear") f.quit() f.close() main() elif eleccion != 'SI' and eleccion != 'NO': print "[-] No es una opcion valida, retornando" raw_input() os.system("clear") f.quit() f.close() main() elif eleccion == 'NO': print "\n[/] Que funcion quiere llevar a cabo?" print "--> Subir Archivos (Subir)" print "--> Descargar Archivos (Descargar)" eleccion3 = raw_input("Eleccion>") eleccion3 = eleccion3.upper() if eleccion3 == "SUBIR": archivos(f) elif eleccion3 == "DESCARGAR": darchivos(f) else: print "[-] El valor introducido no es valido" raw_input() os.system("clear") f.quit() f.close() main() else: print "[-] El valor introducido no es valido" raw_input() os.system("clear") f.quit() f.close() main() def entrarFtp(web): # Funcion encargada de conectar al servidor dando user y pass try: f = ftplib.FTP(web) print "\n"+f.getwelcome() except: print "[-] El servidor es incorrecto, retornando" raw_input() os.system("clear") main() try: user = raw_input("User>") pasd = raw_input("Pass>") f.login(user,pasd) mostrar_directorios(f) except: print "[-] El user o la pass es incorrecto" raw_input() os.system("clear") f.quit() f.close() main() def main(): # Funcion Principal Main print """ _____ ______ ____ __ _ ____ ___ ____ ______ | | | \ / ] | | | / _] \| | | __| | o ) / /| | | | / [_| _ | | | |_ |_| |_| _/ / / | |___ | || _] | |_| |_| | _] | | | | / \_| || || [_| | | | | | | | | | | \ | || || | | | | | |__| |__| |__| \____|_____|____|_____|__|__| |__| ____ __ __ ____ __ __ ____ ___ | \| | | | \| | | \ / _] | o ) | | | D ) | | _ |/ [_ | | ~ | | /| | | | | _] | O |___, | | \| : | | | [_ | | | | . \ | | | | |_____|____/ |__|\_|\__,_|__|__|_____| """ print "[/]Introduzca el servidor ftp" web = raw_input("FTP>") entrarFtp(web) main()
Un saludo