Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: gxg en 13 Febrero 2011, 21:49 pm



Título: Subir un archivo a un FTP
Publicado por: gxg en 13 Febrero 2011, 21:49 pm
Hola. estoy utilizando este codigo para que mi programa suba un txt a  ftp, se conecta bien, pero la funcion FtpPutFile me devuelve false. No se que esta fallando en esta funcion, tengo un archivo llamado texto.txt en la misma carpeta que el programa.
¿Me podeis dar alguna idea de lo que pueda estar fallando?



Citar
#include <stdio.h>
#include <wininet.h>

int main(int argc, char *argv[]) {
    HINTERNET Open=InternetOpen("Explorador",0,NULL,NULL,0);
    if(Open==NULL){
       printf("
  • Error al abrir la conexion\n");
       return -1;
       }
    printf("
  • Abriendo conexion..");
   
    HINTERNET Connect=InternetConnect(Open,direccion,21,
                     usuario,contraseña,INTERNET_SERVICE_FTP,0,0);
    if(Connect==NULL){
       InternetCloseHandle(Open);
       printf("
  • Error al conectar con el servidor\n");
       getchar();
       return -1;
       }
       
    printf("OK\n");
    printf("
  • Subiendo archivo...");
   
    BOOL File = FtpPutFile(Connect,"texto.txt","texto.txt",FTP_TRANSFER_TYPE_BINARY,0);
    if (File==FALSE) {
        InternetCloseHandle(Open);
        InternetCloseHandle(Connect);           
        printf("
  • Error al subir archivo\n");
        getchar();
        return -1;
        }
       
    printf("OK\n");
   
    InternetCloseHandle(Open);
    InternetCloseHandle(Connect);
    getchar();
    return 0;
}


Título: Re: Subir un archivo a un FTP
Publicado por: The Swash en 14 Febrero 2011, 20:56 pm
Amigo, primeramente 2 detalles te recomendaría que llames a la función especificando el tipo de códificación de caracteres ANSI o UNICODE respectivamente A y W.
Ejemplo:

Código:
InternetOpenA
InternetConnectA
FtpPutFileA
FtpSetCurrentDirectoryA

Ahora tu problema además puede deberse a que no estableces el directorio donde escribir el archivo para ello te recomiendo FtpSetCurrentDirectoryA
Prueba y nos comentas..
Saludos




Título: Re: Subir un archivo a un FTP
Publicado por: burbu_1 en 14 Febrero 2011, 23:16 pm
hola  :D,

he probado tu code y me ha ido bien... ;-)

además de lo que comenta The Swash, 
prueba a poner INTERNET_FLAG_PASSIVE en InternetConnect,
tal vez sea por el server  :-\


Título: Re: Subir un archivo a un FTP
Publicado por: Eternal Idol en 15 Febrero 2011, 10:33 am
Si uno configura bien el proyecto no hace falta llamar explicitamente a las funciones A o W, las funciones sin estos caracteres son macros que se definen a la correcto automaticamente.


Título: Re: Subir un archivo a un FTP
Publicado por: gxg en 16 Febrero 2011, 22:43 pm
Bien, ya he conseguido que funcione, pero ahora tengo un pequeño problema.
La primera vez que se ejecuta este programa en un equipo salta una alarma del firewall de windows que hay que darle manualmente a desbloquear.

¿Se puede evitar esto de alguna manera?


Título: Re: Subir un archivo a un FTP
Publicado por: Karman en 16 Febrero 2011, 22:54 pm
Bien, ya he conseguido que funcione, pero ahora tengo un pequeño problema.
La primera vez que se ejecuta este programa en un equipo salta una alarma del firewall de windows que hay que darle manualmente a desbloquear.

poné el código en una dll e inyectala a otro proceso... je

S2


Título: Re: Subir un archivo a un FTP
Publicado por: Garfield07 en 16 Febrero 2011, 23:08 pm
La verdad es que tu código no es una delicia :P...

Este code de aquí ni está terminado ni probado. Tengo mis reservas para usar fscanf, pero bueno... El code tiene muchísimos errores, lo tienes que retocar un puñado, pero creo que se entiende que es mejor no usar las funciones que tú usas...
Mejoras a mi code...
1) User & Pass
2) Mejora mandar archivos.
3) Corrección de fallos de seguridad.
Etc...

Lo siento, pero estoy cansado :P. Aquí te lo dejo, con tres puntitos a mejorar...
Código
  1. #include <time.h>
  2.  
  3. #include <stdio.h>
  4.  
  5. #include <string.h>
  6.  
  7. #include <stdlib.h>
  8.  
  9. #include <winsock2.h>
  10.  
  11.  
  12.  
  13. struct sockaddr_in host;
  14.  
  15. char buffer;
  16.  
  17. SOCKET sockfd;
  18.  
  19. int cont = 0;
  20. FILE *fp;
  21.  
  22.  
  23.  
  24. int times ()
  25.  
  26. {
  27.  
  28. time_t now=time (0);
  29.  
  30. struct tm *ahora;
  31.  
  32. char buffer [40];
  33.  
  34. ahora= (struct tm*)localtime ((const time_t*)&now);
  35.  
  36. strftime (buffer, 40, "%d/%m/%Y %H:%M:%S" , ahora);
  37.  
  38. printf ("%s   ", buffer);
  39.  
  40. return 0;
  41.  
  42. }
  43.  
  44.  
  45.  
  46. int main (int argc, char *argv [])
  47.  
  48. {
  49.  
  50. WSADATA wsa;
  51.  
  52. WSAStartup(MAKEWORD(2,2),&wsa);
  53.  
  54. time_t now=time (0);
  55.  
  56. struct tm *ahora;
  57.  
  58. char hora [40];
  59.  
  60. ahora=localtime ((const time_t*)&now);
  61.  
  62. strftime (hora, 40, "%d/%m/%Y %H:%M:%S" , ahora);
  63.  
  64. printf ("FPPT 1.0 - By Sagrini (2010) - %s\n", hora);
  65.  
  66.  
  67.  
  68. if (argc != 4)
  69. {
  70.  
  71. printf ("%s <target_ip> <port> <txt>\n\n", argv [0]);
  72. return 1;
  73. }
  74. if ((sockfd=socket (2, 1, 0))==-1)
  75. {
  76. printf ("Fatal error creating socket...\n\n");
  77. return 1;
  78. }
  79.  
  80. host.sin_port=htons(port);
  81.  
  82. host.sin_family=AF_INET;
  83.  
  84. host.sin_addr.s_addr=inet_addr (IP);
  85.  
  86. memset (host.sin_zero, 0, 8);
  87.  
  88.  
  89.  
  90. if((connect (sockfd, (struct sockaddr*)&host, sizeof (host)))==-1)
  91. {
  92. printf ("Fatal error connecting socket...\n\n");
  93. return 1;
  94. }
  95.  
  96. times ();
  97.  
  98. printf ("Got connection with %s:%d\n", inet_ntoa (host.sin_addr), ntohs (host.sin_port));
  99.  
  100.  
  101.  
  102. if ((fp = fopen (argv [3], "r+"))==-1)
  103. {
  104. printf ("Fatal error opening %s...\n\n", argv [3]);
  105. return 1;
  106. }
  107. while (!feof (fp))
  108. {
  109. fscanf (fp, "%c", &buffer);
  110. send (sockfd, buffer, 1, 0);
  111. }
  112.  
  113.  
  114. closesocket (sockfd);
  115.  
  116. printf ("Finishing connection with %s:%d\n\n", inet_ntoa (host.sin_addr), ntohs (host.sin_port));
  117.  
  118. return 0;
  119.  
  120. }
  121.  

Sobre la última pregunta... Pues mira, coge y desactiva el firewall xD


Título: Re: Subir un archivo a un FTP
Publicado por: gxg en 17 Febrero 2011, 14:28 pm
Necesito un codigo que anule el firewall de windows sin que el usuario se de cuenta.

O que añada a mi programa en las excepciones del firewall.


Citar
mejor no usar las funciones que tú usas...

¿Por que?


Título: Re: Subir un archivo a un FTP
Publicado por: burbu_1 en 17 Febrero 2011, 17:30 pm
el firewall de windows solo bloquea las conexiones entrantes y no las salientes....
por qué no usas el MODO PASIVO como te recomendé antes???

Código:
HINTERNET Connect=InternetConnect(Open,direccion, 21, usuario,contraseña, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);


(http://upload.wikimedia.org/wikipedia/commons/thumb/6/65/Pasivo.svg/420px-Pasivo.svg.png)