FTPlib – Taller de Python

Anteriormente escribí un artículo sobre el taller impartido en Sec/Admin “Python al ataque”, en esta ocasión voy a seguir escribiendo sobre algunos contenidos de ese taller. Hoy le toca el turno a las librerías FTPLib. El protocolo FTP (File Transfer Protocol) apareció por primera vez en escena en Abril de 1971, aquí os dejo el RFC_114 publicado por aquellos entonces. El protocolo FTP fue siendo modificado para que tuviera más funcionalidades hasta que en octubre de 1985 se publicó el RFC_959  donde figuraban las especificaciones por las que se rige actualmente.

Introducción

FTPlib son unas librerías de Python que nos permitirán realizar conexiones a un servidor ftp desde un script. Para comenzar debemos tener instalado Python en nuestro sistema operativo y las librerías FTPLib. Podemos instalarlas en nuestro sistema GNU/Linux de dos formas:

  • pip install ftplib
  • apt-get install python-ftplib

Primeros pasos

Lo primero es realizar con éxito una conexión a nuestro servidor FTP de pruebas. Podemos realizar la prueba desde la consola de Python o mediante un script, para acceder a la consola abre una shell y teclea el comando python, te abrirá un prompt que comienza con “>>>”.

A continuación dejo el script para poder conectarnos al servidor FTP y obtener un listado de directorios.

import ftplib


ftp = ftplib.FTP('192.168.1.123', 'taller2', 'taller2')
print "Lista de archivos: "
files = ftp.dir()
print files
ftp.cwd("/")

Descargar un archivo con FTPLib

Para descargar un archivo a través de las librerías ftplib usaremos el método retrbinary. Necesitamos pasarle como parámetro de entrada dos cosas: el comando retr con el nombre del fichero y una función callback que será ejecutada cada vez que se reciban un bloque de datos, en este caso lo que hará es escribirla en un fichero del mismo nombre. Un ejemplo para descargarnos un archivo es el siguiente:

import ftplib

filename = "archivo.txt"
ftp = ftplib.FTP("192.168.1.123")
ftp.login("taller2", "taller2")
ftp.cwd("/directorio_prueba")

try:
    ftp.retrbinary("RETR " + filename ,open(filename, 'wb').write)
except Exception as e:
    print "Error " + str(e)

Subir un archivo con FTPLib

Tomando como base el script anterior, podemos escribir un archivo con la función storbinary, en este caso le debemos pasar como primer parámetro el comando con el nombre del fichero y como segundo parámetro el archivo que vayamos a subir.

import ftplib

filename = "archivo.txt"
ftp = ftplib.FTP("192.168.1.123")
ftp.login("taller2", "taller2")
ftp.cwd("/directorio_prueba")

try:
    ftp.storbinary("STOR " + filename ,open(filename, 'rb'))
except Exception as e:
    print "Error " + str(e)

Otras funciones

  • FTP.getwelcome() – Obtiene el mensaje de bienvenida.
  • FTP.mkd(ruta) – Crea un directorio, se le pasa como argumento de entrada la ruta.
  • FTP.rmd(ruta) – Elimina el directorio que le pasemos.
  • FTP.delete(fichero) – Elimina el fichero que le pasamos como parámetro de entrada.
  • FTP.pwd() – (Print Working Directory) Devuelve el directorio actual donde se encuentra.
  • FTP.cwd(ruta) – (Change Working Directory) Cambia de directorio.
  • FTP.dir(ruta) – Devuelve un listado de directorios.
  • FTP.nlst(ruta) – Devuelve un listado con los nombres de arcivo del directorio.
  • FTP.size(archivo) – Devuelve el tamaño del fichero que le pasamos.
  • FTP.rename(oringen, destino) – Renombra un fichero.