Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: 0x5d en 1 Mayo 2012, 11:40 am



Título: [Código-Python]Cliente FTP V2 - JaAViEr | 0x5d
Publicado por: 0x5d en 1 Mayo 2012, 11:40 am
¡ Hola, buen día !

Hoy me tomé un par de minutos para programar un cliente FTP oficial del sitio web (http://www.rootcodes.com). Es por consola, pero vamos que ya estoy en planes de pasarlo a PyQT4. El código consta de 133 humildes líneas, intenté utilizar el máximo control de errores en el programa, para evitar que el programa salga de su curso normal... Si alguien ve que falla en algo por favor avisad aquí mismo ! , el cliente FTP por consola nos permitirá un par de acciones una vez conectado, estas son las básicas:

1.- Listar directorios / Archivos.
2.- Ingresar a un directorio.
3.- Eliminar un archivo ó directorio.
4.- Crear un directorio.
5.- Descargar un archivo remoto.
6.- Enviar un archivo local.
7.- Ver peso de un archivo remoto.
8.- Desconectar.


No creo que sea necesario describir cada una, así que los invito a leer el código :
Código
  1. # -*- coding: utf-8 -*-
  2. from ftplib import FTP
  3. while True:
  4. estado_conexion = 0
  5. try:
  6. print """
  7. ¡ Hola, bienvenido al cliente FTP - RootCodes.Com !
  8.  
  9. ¿ Qué deseas hacer ?
  10.  
  11. 1.- Conectar a servidor FTP.
  12. 2.- Creditos/Autor.
  13. 3.- Salir.
  14. """
  15. opc = input("Opcion:")
  16. if opc == 1:
  17. try:
  18. servidor = raw_input("Servidor: ")
  19. usuario = raw_input("Usuario: ")
  20. clave = raw_input("Clave: ")
  21. sesion = FTP(servidor)
  22. print sesion.getwelcome()
  23. try:
  24. estado_conexion = 1
  25. sesion.login(usuario,clave)
  26. pasive_mode = raw_input("¿ Desea activar el modo pasivo ? (s/n) > ").lower()
  27. if pasive_mode == "s":
  28. print "¡ Activando modo pasivo !"
  29. try:
  30. sesion.set_pasv(True)
  31. print "¡ Modo pasivo activado !"
  32. except:
  33. print "¡ No se pudo activar modo pasivo !"
  34. while estado_conexion!=0:
  35. print "\n\nActualmente te encuentras en:", sesion.pwd()
  36. print """
  37. 1.- Listar directorios / Archivos.
  38. 2.- Ingresar a un directorio.
  39. 3.- Eliminar un archivo ó directorio.
  40. 4.- Crear un directorio.
  41. 5.- Descargar un archivo remoto.
  42. 6.- Enviar un archivo local.
  43. 7.- Ver peso de un archivo remoto.
  44. 8.- Desconectar.
  45. """
  46. try:
  47. in_server = input("Opción: ")
  48. except:
  49. print "¡ Ingresa un número porfavor !"
  50. if in_server == 1:
  51. try:
  52. print "Lista de archivos / directorios:"
  53. sesion.dir()
  54. except:
  55. print "¡ Error al listar archivos / directorios !"
  56. elif in_server == 2:
  57. try:
  58. join_dir = raw_input("Directorio: ")
  59. sesion.cwd(join_dir)
  60. except:
  61. print "¡ Error al intentar ingresar al directorio !"
  62. elif in_server == 3:
  63. print "1.- Eliminar archivo.\n2.- Eliminar Directorio."
  64. try:
  65. que_eliminar = input("Opción: ")
  66. except:
  67. print "¡ Por favor ingresa un número válido !"
  68. if que_eliminar == 1:
  69. try:
  70. archivo_del = raw_input("Archivo a eliminar: ")
  71. sesion.delete(archivo_del)
  72. print "¡ Archivo eliminado correctamente !"
  73. except:
  74. print "¡ Error al intentar eliminar el archivo !"
  75. elif que_eliminar == 2:
  76. try:
  77. carpeta_del = raw_input("Directorio a eliminar: ")
  78. sesion.rmd(carpeta_del)
  79. print "¡ Directorio Eliminado correctamente !"
  80. except:
  81. print "¡ Error al intentar eliminar el directorio !"
  82. else:
  83. print "¡ Opción ingresada no existe !"
  84. elif in_server == 4:
  85. try:
  86. crear_carpeta = raw_input("Nombre del nuevo directorio: ")
  87. sesion.mkd(crear_carpeta)
  88. print "¡ Nuevo directorio creado con éxito !"
  89. except:
  90. print "¡ Error al intentar crear el directorio !"
  91. elif in_server == 5:
  92. try:
  93. archivo_download = raw_input("Archivo a descargar: ")
  94. sesion.retrbinary("RETR %s"%archivo_download, open(archivo_download,"wb").write)
  95. print "¡ Archivo descargado con éxito !"
  96. except:
  97. print "¡ No se pudo descargar el archivo !"
  98. elif in_server == 6:
  99. try:
  100. archivo_local = raw_input("Archivo local: ")
  101. file_local = open(archivo_local,'rb')
  102. sesion.storbinary("STOR "+archivo_local, file_local)
  103. file_local.close()
  104. print " ¡Archivo enviado con éxito !"
  105. except:
  106. print "¡ No se pudo enviar el archivo !"
  107. elif in_server == 7:
  108. try:
  109. archivo_peso = raw_input("Archivo local: ")
  110. print "El peso del archivo %s, es: %s"%(archivo_peso,sesion.size(archivo_peso))
  111. except:
  112. print "¡ No se pudo obtener el peso !"
  113. elif in_server == 8:
  114. sesion.quit()
  115. estado_conexion=0
  116. print "¡ Desconectado con éxito !"
  117. except:
  118. print "¡ No se pudo lograr la conexión !"
  119. except:
  120. print "¡ Error en los datos de conexión !"
  121.  
  122. elif opc == 2:
  123. print """
  124. Créditos -> Autor : JaAViEr || 0x5d
  125.  Twitter : @0x5d
  126.  WebSite : http://www.rootcodes.com
  127. """
  128.  
  129. elif opc == 3:
  130. print "¡ Gracias por utilizar Cliente FTP - RootCodes.Com !"
  131. break
  132. except:
  133. print "¡ Opción incorrecta !"
  134.  
¡ Espero les haya gustado !

Fuente : http://rootcodes.com/pythoncliente-ftp-rootcodes-com/

Saludos, Javier.


Título: Re: [Código-Python]Cliente FTP V2 - JaAViEr | 0x5d
Publicado por: Runex en 1 Mayo 2012, 15:57 pm
Bueno es ;), al final lo hicistes :).

Espero la version Pyqt4, seguro que sale bien :)


Título: Re: [Código-Python]Cliente FTP V2 - JaAViEr | 0x5d
Publicado por: 0x5d en 3 Mayo 2012, 21:47 pm
Bueno es ;), al final lo hicistes :).

Espero la version Pyqt4, seguro que sale bien :)
El source original lo perdí, así que lo estoy empezando casi de 0 !


Título: Re: [Código-Python]Cliente FTP V2 - JaAViEr | 0x5d
Publicado por: polmadur en 4 Mayo 2012, 10:09 am
una pregunta, que diferencia hay entre input y raw_input? Yo siempre he utilizado el segundo.


Título: Re: [Código-Python]Cliente FTP V2 - JaAViEr | 0x5d
Publicado por: Arnau27 en 4 Mayo 2012, 16:37 pm
una pregunta, que diferencia hay entre input y raw_input? Yo siempre he utilizado el segundo.
Bueno, con raw_input se pueden manejar errores, en cambio con input no. Aunque a partir de la version 3.0 de python, como bien sabe 0x5d, raw_input desaparece i solo queda input que adquiere la capacidad de manejar errores.

Edito: 0x5d Aprovecho para felicitarte por tu trabajo con python.


Título: Re: [Código-Python]Cliente FTP V2 - JaAViEr | 0x5d
Publicado por: 0x5d en 4 Mayo 2012, 17:25 pm
Bueno, con raw_input se pueden manejar errores, en cambio con input no. Aunque a partir de la version 3.0 de python, como bien sabe 0x5d, raw_input desaparece i solo queda input que adquiere la capacidad de manejar errores.

Edito: 0x5d Aprovecho para felicitarte por tu trabajo con python.
¡ Muchas Gracias ! aunque mis trabajos no son nada del otro mundo por ahora :c

una pregunta, que diferencia hay entre input y raw_input? Yo siempre he utilizado el segundo.
raw_input() se utiliza para insertar valores alfanuméricos, mientras que el
input() lo utilizamos solo para valores numéricos :D

Eso en las versiones < 3.0 de Python

¡ Saludos, Javier !