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.
* 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: