Páginas

viernes, 15 de junio de 2012

Acceder a un servidor ftp desde un programa en C++


Acceder a  un servidor ftp
 desde un programa en C++

Me ha surgido la necesidad, de crear un programa que acceda a un ftp para subir unos archivos.

El tema es que lo podia hacer desde la linea de comandos desde un script, por ejemplo, pero asi tendria de enseñar la contraseña, y es lo que no deseo...


Buscando por internet, me he encontrado una forma de ejecutar comandos desde el lenguaje C++, y no es usando la orden "system(..)" de C++, ya que con este no lo he conseguido hacerlo, ya que no podia mandar varias ordenes.


He usado la orden "popen(...)", con ella he podido tanto conectarme, ademas de hacer un listado de varios subdirectorios (cambiandome de directorio)...

Aqui podeis ver como es el codigo:




/*
* EJEMPLO DE ACCESO A FTP, por un programa en C.
* JsbSan, licencia GPL.
* Basado en el ejemplo de: Javier Abellán. 26 de Marzo de 2003
*
* Programa de demo de la función popen()
* http://www.chuidiang.com/clinux/funciones/funciones.php#popen
*/
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
/* Fichero con el que abriremos
FILE *fichero=NULL;
/* Variable auxiliar para leer el fichero */
char aux[1000];
/* Se abre el fichero lftp, pasándole el parámetro y se comprueba
* que se ha podido abrir correctamente */
// lftp -u nombre,clave direccionftp
fichero = popen ("lftp -u nombre_usuario,clave direccion_ftp","w");

if (fichero == NULL)
{
perror ("No se puede abrir /bin/lftp");
return -1;
}
/* Se lee la primera linea y se hace un bucle, hasta fin de fichero,
* para ir sacando por pantalla los resultados.
*/
fprintf(fichero,"ls\n"); // escribo el listado del contenido del directorio del servidor
fprintf(fichero,"quit\n"); // cierro el lftp
/* Se cierra el fichero */
pclose (fichero);
return 0; //termino el programa
}

De esta manera, una vez compilado el codigo fuente, consigo listar el contenido del servidor ftp sin que "nadie" vea la contraseña necesaria para entrar en el servidor (al estar esta contraseña "compilada" junto al código fuente).





Me he basado en el ejemplo de popen() de la pagina web: