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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda al programar un servidor FTP en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda al programar un servidor FTP en C  (Leído 1,914 veces)
PiernaDeFelipeCamiroaga

Desconectado Desconectado

Mensajes: 12



Ver Perfil
Ayuda al programar un servidor FTP en C
« en: 19 Octubre 2018, 21:09 pm »

La cosa es que programe un servidor con protocolo TPC en linux y funciona para enviar mensajes y cosas muy básicas usando el comando telnet de linux. Pero lo que quiero es poder subir archivos o descargarlos desde ese servidor tengo idea de como hacerlo, en Internet vi que podía usar Firezilla que seria la opción fácil pero la verdad quiero yo programar toda la parte del servidor si alguien me puede ayudar a poder hacer eso estaria muy agradecido. Gracias de antemano

Código
  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <unistd.h>
  5. #include <sys/socket.h>
  6. #include <arpa/inet.h>
  7. #include <netinet/in.h>
  8. #include <netdb.h>
  9. #include <sys/sendfile.h>               //Sirve para poder enviar archivos
  10. #include <sys/types.h>                  //Sirve para poder recivir archivos
  11. #include <linux/if_packet.h>
  12. #include <sys/ioctl.h>                  // Estas 2 librerias son para poder saber algunos datos sobre el
  13. #include <net/if.h>                     // Cliente en cuention
  14.  
  15. #define BUFFSIZE 1
  16. #define ERROR -1
  17. #define BUFFERSIZE 512
  18.  
  19. // Funciones //
  20.  
  21. int login(int socket_cliente);
  22. void direccip(int socket_cliente, struct sockaddr_in addr);
  23. void salir(int socket_servidor, int socket_cliente);
  24. int intentos = 0;
  25.  
  26. int main(){
  27.  
  28.    int socket_servidor;            //Socket del servidor para escuchar mensajes
  29.    int socket_cliente;             //Socket del cliente para enviar mesajes
  30.    int puerto = 8081;              //Numero de puerto en /etc/service
  31.    char BUFFER[BUFFERSIZE];        //Mensaje para usar los comandos
  32.    FILE * archivo;                 //Archivo sin formato
  33.  
  34.    socket_servidor = socket(AF_INET, SOCK_STREAM, 0);
  35.    socklen_t longc;
  36.  
  37.   // Declaracion de las escructuras;
  38.    struct sockaddr_in servidor, cliente;                   //Creamos las estructuras del cliente y servidor al mismo tiempo
  39.    bzero((char *)&servidor, sizeof(servidor));             //Primero llenamos de 0's la struct
  40.    servidor.sin_family = AF_INET;                          //Asiganamos la estructura
  41.    servidor.sin_port = htons(puerto);                      //Indicamos el puerto
  42.    servidor.sin_addr.s_addr = INADDR_ANY;                  //Esta macro especifica nuestra direccion
  43.  
  44.    if(bind(socket_servidor, (struct sockaddr *)&servidor, sizeof(servidor)) < 0){ //asignamos un puerto al socket
  45.        printf("Error al asociar el puerto a la conexion\n");
  46.        return 1;
  47.    }
  48.  
  49.  
  50.    listen(socket_servidor,3);                              //Escuchamos por este puero maximo 2 clientes distintos
  51.    while(free){
  52.        intentos = 0;
  53.        printf("Escuchando en el puerto %d\n", ntohs(servidor.sin_port));
  54.        longc = sizeof(cliente);                                //Asignamos el tamano de la estructura a esta variable
  55.        socket_cliente = accept(socket_servidor, (struct sockaddr *)&cliente, &longc); // Esperamos una conexion
  56.        if(socket_cliente == -1){
  57.            printf("Error en al conexion\n");
  58.         return 1;
  59.        }
  60.        printf("Conectando con %s:%d\n",inet_ntoa(cliente.sin_addr),htons(cliente.sin_port));
  61.  
  62.    //Login con el servidor
  63.  
  64.        int conexion = login(socket_cliente);
  65.        printf("\n");
  66.        if(conexion == 12){
  67.            while(free){
  68.                bzero(BUFFER, BUFFERSIZE);
  69.                recv(socket_cliente,BUFFER,50,0);
  70.                if(strncmp(BUFFER,"IP",2) == 0){
  71.                    direccip(socket_cliente, cliente);
  72.                }
  73.                if(strncmp(BUFFER,"EXIT", 4) == 0){
  74.                    salir(socket_servidor, socket_cliente);
  75.                }
  76.            }
  77.        }
  78.    }
  79. }
  80. int login(int socket_cliente){
  81.  
  82.    char user[8];
  83.    char pass[8];
  84.  
  85.    if(intentos == 3){
  86.        close(socket_cliente);
  87.        return 0;
  88.    }
  89.  
  90.    memset(user,0 , 8);
  91.    memset(pass,0 , 8);
  92.    printf("%i",intentos );
  93.    printf("\n");
  94.  
  95.  
  96.    send(socket_cliente,"Usuario: ",10,0);
  97.    read(socket_cliente,user,9);
  98.    send(socket_cliente, "Contrasena: ", 12, 0);
  99.    read(socket_cliente, pass, 8);
  100.  
  101.    if(strncmp(user, "root",4) == 0){
  102.        if(strncmp(pass, "root",4) == 0){
  103.            send(socket_cliente,"Bienvenido\n",12,0);
  104.        }else{
  105.            send(socket_cliente,"ERROR\n",7,0);
  106.            intentos = intentos + 1;
  107.            login(socket_cliente);
  108.        }
  109.    }else{
  110.        send(socket_cliente,"ERROR\n",7,0);
  111.        intentos = intentos + 1;
  112.        login(socket_cliente);
  113.    }
  114. }
  115.  
  116. void direccip(int socket_cliente, struct sockaddr_in addr){
  117.    write(socket_cliente, "Tu eres: ",9);
  118.    write(socket_cliente, inet_ntoa(addr.sin_addr), 16);
  119.    write(socket_cliente,"\n",2);
  120. }
  121.  
  122. void salir(int socket_servidor, int socket_cliente){
  123.    write(socket_cliente, "ADIOS ;)\n", 10);
  124.    close(socket_cliente);
  125. }


« Última modificación: 19 Octubre 2018, 22:25 pm por PiernaDeFelipeCamiroaga » En línea

PiernaDeFelipeCamiroaga

Desconectado Desconectado

Mensajes: 12



Ver Perfil
Re: Ayuda al programar un servidor FTP en C
« Respuesta #1 en: 19 Octubre 2018, 21:33 pm »

Creo que falto aclarar que todo esta hecho en Linux Ubuntu


« Última modificación: 19 Octubre 2018, 21:35 pm por PiernaDeFelipeCamiroaga » En línea

BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: Ayuda al programar un servidor FTP en C
« Respuesta #2 en: 19 Octubre 2018, 22:20 pm »

Falta la función enviar...


B#
En línea



PiernaDeFelipeCamiroaga

Desconectado Desconectado

Mensajes: 12



Ver Perfil
Re: Ayuda al programar un servidor FTP en C
« Respuesta #3 en: 19 Octubre 2018, 22:25 pm »

La borre porque no funcionaba pero me falto borrar la paste donde se llama a la función de todas formas si sabes como hacer lo que estoy preguntando seria de mucha ayuda
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Ayuda] alguno que sepa programar en batch ayuda...
Scripting
taton 5 3,852 Último mensaje 20 Septiembre 2006, 01:43 am
por taton
Ayuda con programar un .bat
Scripting
rakax 2 2,350 Último mensaje 9 Noviembre 2006, 18:55 pm
por ne0x
programar en .bat ayuda
Scripting
yolman23 5 5,899 Último mensaje 9 Enero 2010, 00:18 am
por leogtz
Programar ayuda
Programación General
klarion 1 2,329 Último mensaje 14 Marzo 2012, 00:52 am
por $Edu$
Ayuda proyecto servidor web + servidor Radius + mysql
Dudas Generales
Roek 0 1,405 Último mensaje 13 Octubre 2018, 17:53 pm
por Roek
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines