elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Python] Cliente Ftp Tkinter
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Python] Cliente Ftp Tkinter  (Leído 3,981 veces)
Runex

Desconectado Desconectado

Mensajes: 192


http://tutogramacion.blogspot.com


Ver Perfil WWW
[Python] Cliente Ftp Tkinter
« en: 15 Abril 2012, 00:16 am »

Buenas compañeros, me ha dado por aplicarle interfaz a un viejo programa que cree, un cliente ftp.
Aún le faltan algunas cosas como una opción para retroceder de directorio y otra para subir archivos. Algún día de estos lo añadiré que me voy a la cama :).
Os recomiendo que lo guardéis en .pyw así no se ejecuta por detrás la ventana de comandos.
EDIT: Le he añadido nuevas opciones, la posibilidad de abrir nuevas más clientes en diferentes ventanas, guardar registros de tus movimientos en un txt, subir archivos y cerrar la conexión limpiando directorios y archivos, ahora cuando tenga tiempo le añado, la de retroceder, renombrar y eliminar, y con eso finalizaré :).

EDIT2: Bueno ya le he añadido las opciones que le faltaban y en mi opinión ya está terminado. Si encontráis algún bug, reportadmelo y lo corrijo gustosamente :)

Os dejo el código:

Código
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-    
  3. #Copyright 2012 jose <jose@jose-desktop>
  4. from Tkinter import *
  5. import ftplib,tkMessageBox
  6. class Ftp_Client:
  7.  
  8. def __init__(self,root):
  9. self.root = root
  10. self.root.title("ClientFtp")
  11. self.top=Menu(self.root)
  12. self.root.config(menu=self.top)
  13. self.file = Menu(self.top)
  14. self.about = Menu(self.top)
  15. self.about.add_command(label="Sobre mi",command=self.informacion,underline=0)
  16. self.file.add_command(label="Abrir nueva ventana",command=self.ventana_x,underline=0)
  17. self.file.add_command(label="Cerrar conexion",command=self.close_conection,underline=0)
  18. self.file.add_command(label="Registro en txt",command=self.guardar_txt,underline=0)
  19. self.top.add_cascade(label="File",menu=self.file)
  20. self.top.add_cascade(label="About",menu=self.about)
  21. self.root.configure(bg="black")
  22. self.root.maxsize("700","550")
  23. self.root.minsize("700","550")
  24. self.url = StringVar()
  25. self.listadescarga = []
  26. self.listasubida = []
  27. self.listaeliminados = []
  28. self.listanombres = []
  29. self.listarenombres = []
  30. self.directorio = StringVar()
  31. Label(self.root,fg="green",bg="black",text="Introduce tu servidor Ftp",justify="center",font=("Helvetica",18)).grid(padx=200)
  32. self.entrada = Entry(self.root,width="40",textvariable=self.url)
  33. self.entrada.grid(pady=15)
  34. self.conectar = Button(self.root,text="Conectar",command=self.conect_Ftp)
  35. self.conectar.grid(pady=15)
  36. Label(self.root,fg="green",bg="black",text="Directorios",font=("Helvetica",16)).grid(pady=15)
  37. self.listbox = Listbox(self.root,width="60")
  38. self.listbox.grid(row=4,column=0)
  39. self.directorios = Entry(self.root,textvariable=self.directorio,width="30")
  40. self.directorios.grid(pady=15)
  41. self.download = Button(self.root,text="Download",command=self.panel_descarga)
  42. self.download.grid(row=7)
  43. self.delete = Button(self.root,text="Eliminar",command=self.eliminar)
  44. self.delete.grid(row=7,padx=465,columnspan=500)
  45. self.avanzar = Button(self.root,text="Avanzar",command=self.avanzar)
  46. self.avanzar.grid(row=6,column=0,padx=380,columnspan=270)
  47. self.renombrar = Button(self.root,text="Rename",command=self.rename)
  48. self.renombrar.grid(row=6,padx=380,columnspan=750)
  49. self.retroceder = Button(self.root,text="Retroceder",command=self.retroceder)
  50. self.retroceder.grid(row=6,pady=10)
  51. self.upload = Button(self.root,text="Upload",command=self.panel_subida)
  52. self.upload.grid(row=7,column=0,padx=290,columnspan=260)
  53.  
  54. def conect_Ftp(self):
  55. try:
  56. self.conectftp = ftplib.FTP(self.entrada.get())
  57. self.window = Tk()
  58. self.window.maxsize("300","280")
  59. self.window.minsize("300","280")
  60. self.window.title("Conectar Con Servidor")
  61. self.window.configure(bg="black")
  62. Label(self.window,fg="green",bg="black",text="Panel de Logueo",font=("Helvetica",15)).grid(padx=70)
  63. self.user = StringVar()
  64. self.password = StringVar()
  65. Label(self.window,fg="green",bg="black",text="Usuario").grid(pady=10)
  66. self.usuario = Entry(self.window,width="20",textvariable=self.user)
  67. self.usuario.grid(pady=10)
  68. Label(self.window,fg="green",bg="black",text="Password").grid(pady=10)
  69. self.enpassword = Entry(self.window,width="20",textvariable=self.password)
  70. self.enpassword.grid(pady=10)
  71. self.logueo = Button(self.window,text="Loguear",command=self.log_Ftp)
  72. self.logueo.grid(pady=15)
  73. self.window.mainloop()
  74. except:
  75. tkMessageBox.showinfo("Error","No existe el servidor")
  76.  
  77. def log_Ftp(self):
  78. try:
  79. self.conectftp.login(self.usuario.get(),self.enpassword.get())
  80. self.datos = [self.usuario.get(),self.enpassword.get()]
  81. self.window.destroy()
  82. self.listar_directorios()
  83. except:
  84. tkMessageBox.showinfo("Error","User y Pass Incorrectos")
  85.  
  86. def listar_directorios(self):
  87. self.listbox.delete(0,END)
  88. self.listadir = []
  89. self.listbox.insert(END,"----Directorios----")
  90. for self.directorio in self.conectftp.nlst():
  91. self.listbox.insert(END,self.directorio)
  92. self.listadir.append(self.directorio)
  93.  
  94. def avanzar(self):
  95. try:
  96. self.conectftp.cwd(self.directorios.get())
  97. self.listar_directorios()
  98. except:
  99. tkMessageBox.showinfo("Error","No existe el directorio")
  100.  
  101. def panel_descarga(self):
  102. self.paneldescarga = Tk()
  103. self.paneldescarga.maxsize("300","200")
  104. self.paneldescarga.minsize("300","200")
  105. self.paneldescarga.title("Download")
  106. self.paneldescarga.configure(bg="black")
  107. Label(self.paneldescarga,text="Introduce el nombre para guardar el archivo",bg="black",fg="green").grid(pady=10)
  108. self.nombre = StringVar()
  109. self.nombreguardado = Entry(self.paneldescarga,textvariable=self.nombre)
  110. self.nombreguardado.grid(pady=10)
  111. self.guardar = Button(self.paneldescarga,text="Guardar",command=self.descarga)
  112. self.guardar.grid(pady=10)
  113. self.paneldescarga.mainloop()
  114. def descarga(self):
  115. try:
  116. self.listadescarga.append(self.directorios.get())
  117. self.archivolocal = open(self.nombreguardado.get(),'wb')
  118. except:
  119. tkMessageBox.showinfo("Error","No se ha podido guardar el archivo")
  120. self.paneldescarga.destroy()
  121. try:
  122. self.conectftp.retrbinary('RETR '+self.directorios.get(),self.archivolocal.write)
  123. self.paneldescarga.destroy()
  124. except:
  125. tkMessageBox.showinfo("Error","No existe el archivo")
  126.  
  127. def informacion(self):
  128. tkMessageBox.showinfo("Sobre Mi","ClienteFtp 1.0 By Rune, alumno de 2 bachiller en el centro EPLA de valencia")
  129.  
  130. def ventana_x(self):
  131. self.root2 = Tk()
  132. self.instancia = ventana_2(self.root2)
  133.  
  134. def guardar_txt(self):
  135. try:
  136. self.archivodatos = open("Backup"+self.entrada.get()+".txt","a")
  137. self.archivodatos.write("-------------------------------------------\n")
  138. self.archivodatos.write("Conexion con: "+self.entrada.get()+"\n")
  139. self.archivodatos.write("Usuario--->" +self.datos[0] +"\n")
  140. self.archivodatos.write("Password--->" + self.datos[1] + "\n")
  141. self.archivodatos.write("---Directorios Visualizados Del Servidor---\n")
  142. for self.direct in self.listadir:
  143. self.archivodatos.write(self.direct+"\n")
  144. self.archivodatos.write("\n---Archivos Descargados---\n")
  145. for self.archiv in self.listadescarga:
  146. self.archivodatos.write(self.archiv + "\n")
  147. self.archivodatos.write("\n---Archivos Subidos---\n")
  148. for self.archivo in self.listasubida:
  149. self.archivodatos.write(self.archivo + "\n")
  150. self.archivodatos.write("\n---Archivos Renombrados---\n")
  151. for self.nombre in self.listanombres:
  152. self.archivodatos.write(self.nombre)
  153. for self.renombre in self.listarenombres:
  154. self.archivodatos.write("----->"+self.renombre+"\n")
  155. self.archivodatos.write("\n---Archivos Eliminados---\n")
  156. for self.eliminado in self.listaeliminados:
  157. self.archivodatos.write(self.eliminado)
  158. self.archivodatos.close()
  159. except:
  160. tkMessageBox.showinfo("Error","Compruebe que ha inicializado alguna conexion")
  161.  
  162. def panel_subida(self):
  163. self.panelsubida = Tk()
  164. self.panelsubida.maxsize("350","200")
  165. self.panelsubida.minsize("350","200")
  166. self.panelsubida.title("Upload")
  167. self.panelsubida.configure(bg="black")
  168. Label(self.panelsubida,text="Introduce el nombre del archivo junto con su directorio",bg="black",fg="green").grid(pady=10)
  169. self.nombrex = StringVar()
  170. self.nombrex2 = StringVar()
  171. self.nombreguardados = Entry(self.panelsubida,textvariable=self.nombrex)
  172. self.nombreguardados.grid(pady=10)
  173. Label(self.panelsubida,text="Introduce el nombre para guardar el archivo",bg="black",fg="green").grid(pady=10)
  174. self.nombresubir = Entry(self.panelsubida,textvariable=self.nombrex2)
  175. self.nombresubir.grid(pady=10)
  176. self.subir = Button(self.panelsubida,text="Subir",command=self.subida)
  177. self.subir.grid(pady=10)
  178. self.panelsubida.mainloop()
  179.  
  180. def subida(self):
  181. try:
  182. self.archivo_origen = open(self.nombreguardados.get(),"rb")
  183. except:
  184. tkMessageBox.showinfo("Error","El archivo no existe")
  185. try:
  186. self.conectftp.storbinary('STOR ' + self.nombresubir.get(),self.archivo_origen)
  187. self.listar_directorios()
  188. except:
  189. tkMessageBox.showinfo("Error","No se ha podido subir el archivo")
  190. self.listasubida.append(self.nombreguardados.get())
  191. self.panelsubida.destroy()
  192.  
  193. def close_conection(self):
  194. try:
  195. self.conectftp.close()
  196. self.listbox.delete(0,END)
  197. except:
  198. tkMessageBox.showinfo("Error","Compruebe que ha inicializado una conexion")
  199. def retroceder(self):
  200. try:
  201. self.conectftp.cwd("..")
  202. self.listar_directorios()
  203. except:
  204. tkMessageBox.showinfo("Error","Compruebe que ha inicializado una conexion")
  205. def rename(self):
  206. self.window_rename = Tk()
  207. self.window_rename.configure(bg="black")
  208. self.window_rename.title("Rename")
  209. Label(self.window_rename,text="Introduce el nombre para renombrar",bg="black",fg="green").grid()
  210. self.renombre = StringVar()
  211. self.renombrar = Entry(self.window_rename,textvariable=self.renombre)
  212. self.renombrar.grid()
  213. self.acept = Button(self.window_rename,text="Renombrar",command=self.ejec_rename)
  214. self.acept.grid()
  215.  
  216. def ejec_rename(self):
  217. self.fromname = self.directorios.get()
  218. self.toname = self.renombrar.get()
  219. try:
  220. self.conectftp.rename(self.fromname,self.toname)
  221. self.listanombres.append(self.fromname)
  222. self.listarenombres.append(self.toname)
  223. self.listar_directorios()
  224. except:
  225. tkMessageBox.showinfo("Error","No existe el archivo")
  226. self.window_rename.destroy()
  227.  
  228. def eliminar(self):
  229. try:
  230. self.conectftp.delete(self.directorios.get())
  231. self.listaeliminados.append(self.directorios.get())
  232. self.listar_directorios()
  233. except:
  234. tkMessageBox.showinfo("Error","No existe el archivo")
  235.  
  236.  
  237. class ventana_2(Ftp_Client):
  238. pass
  239.  
  240. if __name__ == "__main__":
  241. root = Tk()
  242. instance = Ftp_Client(root)
  243. root.mainloop()
  244.  
  245.  

Un saludo :)


« Última modificación: 16 Abril 2012, 02:01 am por Runex » En línea

"No renunciaría al bambú.
Nunca renuciaría a ti.
No te compares con otros" "El me dijo:
El bambú tenía un propósito diferente al del
helecho, sin embargo eran necesarios y
hacían del bosque un lugar hermoso".
0x5d

Desconectado Desconectado

Mensajes: 241



Ver Perfil WWW
Re: [Python] Cliente Ftp Tkinter
« Respuesta #1 en: 16 Abril 2012, 07:07 am »

No tengo windows para probarlo :/ podrías dejar un screenshot ?


En línea

Runex

Desconectado Desconectado

Mensajes: 192


http://tutogramacion.blogspot.com


Ver Perfil WWW
Re: [Python] Cliente Ftp Tkinter
« Respuesta #2 en: 16 Abril 2012, 19:13 pm »

No si yo lo corro en ubuntu :), no hace falta windows para nada, tkinter es un módulo standar  ;-)

De todas formas aquí te dejo un screen:

En línea

"No renunciaría al bambú.
Nunca renuciaría a ti.
No te compares con otros" "El me dijo:
El bambú tenía un propósito diferente al del
helecho, sin embargo eran necesarios y
hacían del bosque un lugar hermoso".
0x5d

Desconectado Desconectado

Mensajes: 241



Ver Perfil WWW
Re: [Python] Cliente Ftp Tkinter
« Respuesta #3 en: 18 Abril 2012, 04:48 am »

No si yo lo corro en ubuntu :), no hace falta windows para nada, tkinter es un módulo standar  ;-)

De todas formas aquí te dejo un screen:


Jajaja yo uso Debian 6 y no me deja correrlo ! :P
En línea

Runex

Desconectado Desconectado

Mensajes: 192


http://tutogramacion.blogspot.com


Ver Perfil WWW
Re: [Python] Cliente Ftp Tkinter
« Respuesta #4 en: 18 Abril 2012, 14:51 pm »

Jajaja yo uso Debian 6 y no me deja correrlo ! :P

Pues raro es, lo he probado en opensuse y en la misma versión de debian que tu y si me funciona XD

Un saludo :)
En línea

"No renunciaría al bambú.
Nunca renuciaría a ti.
No te compares con otros" "El me dijo:
El bambú tenía un propósito diferente al del
helecho, sin embargo eran necesarios y
hacían del bosque un lugar hermoso".
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines