Advertisement
Guest User

Untitled

a guest
Jun 17th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.14 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <errno.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <string.h>
  7. #include <unistd.h>
  8. #include <sys/types.h>
  9. #include <sys/stat.h>
  10. #include <fcntl.h>
  11.  
  12.  
  13.  
  14. #define MAXBUFFER 512
  15. #define PUERTO 4950
  16.  
  17. int main(int argc, char * argv[]){
  18.  
  19.  
  20.     int sd, n_sd;
  21.     struct sockaddr_in server,cliente;
  22.     socklen_t longCliente = sizeof(cliente);
  23.     char buffer[MAXBUFFER];
  24.  
  25.     if((sd=socket(PF_INET,SOCK_STREAM,0)) < 0){
  26.         perror("socket");
  27.         exit(1);
  28.     }
  29.  
  30.     memset(&server,0,sizeof(server));
  31.     server.sin_family = AF_INET;
  32.     server.sin_port = htons(PUERTO);
  33.     server.sin_addr.s_addr = INADDR_ANY;
  34.  
  35.     if(bind(sd,(struct sockaddr *)&server, sizeof(server)) < 0){
  36.         perror("bind");
  37.         exit(1);
  38.     }
  39.  
  40.     if(listen(sd,5) < 0){
  41.         perror("listen");
  42.         exit(1);
  43.     }
  44.  
  45.     while(1){
  46.  
  47.         printf("Esperando conexión...\n");
  48.  
  49.         n_sd = accept(sd,(struct sockaddr *)&cliente, &longCliente);
  50.         if(n_sd < 0){
  51.             perror("accept");
  52.             close(sd);
  53.             exit(1);
  54.         }
  55.  
  56.  
  57.             FILE * file = fopen("claves.txt","r");
  58.             if(file == NULL){
  59.                 perror("fopen");
  60.                 close(n_sd);
  61.                 close(sd);
  62.                 exit(1);
  63.             }
  64.  
  65.         uint32_t longBigEndian;
  66.  
  67.         if((read(n_sd,&longBigEndian,sizeof(uint32_t))) != sizeof(uint32_t)){
  68.             perror("longBigEndian");
  69.             close(n_sd);
  70.             close(sd);
  71.             exit(1);
  72.         }
  73.  
  74.         int longitud = ntohl(longBigEndian);
  75.  
  76.         if((read(n_sd,buffer,longitud)) != longitud){
  77.             perror("buffer");
  78.             close(n_sd);
  79.             close(sd);
  80.             exit(1);
  81.         }
  82.  
  83.         buffer[longitud] = '\0';
  84.  
  85.         char linea[MAXBUFFER];
  86.         int encontrado = 0;
  87.         char * user;
  88.         char * pass;
  89.         uint32_t cero = htonl(0);
  90.         uint32_t m_uno = htonl(-1);
  91.  
  92.         while(fgets(linea,MAXBUFFER-1,file) != NULL){
  93.             linea[strlen(linea)-1] = '\0';
  94.             char * arroba = strstr(linea, "@");
  95.             *arroba = '\0';
  96.             user = linea;
  97.             pass = arroba+1;
  98.            
  99.             if(strcmp(buffer,user) == 0){
  100.                 encontrado = 1;
  101.                 break;
  102.             }
  103.         }
  104.         printf("%s\n",user);
  105.         printf("%s\n",pass );
  106.         if(encontrado == 1){
  107.             int encontrado_pass = 0;
  108.             if(write(n_sd,&cero,sizeof(uint32_t)) != sizeof(uint32_t)){
  109.                 perror("write");
  110.                 close(n_sd);
  111.                 close(sd);
  112.                 exit(1);
  113.             }
  114.        
  115.             //Contraseña
  116.  
  117.             if((read(n_sd,&longBigEndian,sizeof(uint32_t))) != sizeof(uint32_t)){
  118.                 perror("longBigEndian");
  119.                 close(n_sd);
  120.                 close(sd);
  121.                 exit(1);
  122.             }
  123.  
  124.             int longitud = ntohl(longBigEndian);
  125.  
  126.             if((read(n_sd,buffer,longitud)) != longitud){
  127.                 perror("buffer");
  128.                 close(n_sd);
  129.                 close(sd);
  130.                 exit(1);
  131.             }
  132.  
  133.             if(strcmp(buffer,pass) == 0){
  134.                 encontrado_pass = 1;
  135.             }
  136.  
  137.             if(encontrado_pass == 1){
  138.                 if(write(n_sd,&cero,sizeof(uint32_t)) != sizeof(uint32_t)){
  139.                     perror("write");
  140.                     close(n_sd);
  141.                     close(sd);
  142.                     exit(1);
  143.                 }
  144.             }else{
  145.  
  146.                 if(write(n_sd,&m_uno,sizeof(uint32_t)) != sizeof(uint32_t)){
  147.                     perror("write");
  148.                     close(n_sd);
  149.                     close(sd);
  150.                     exit(1);
  151.                 }
  152.             }
  153.        
  154.         }else{
  155.  
  156.             if(write(n_sd,&m_uno,sizeof(uint32_t)) != sizeof(uint32_t)){
  157.                 perror("write");
  158.                 close(n_sd);
  159.                 close(sd);
  160.                 exit(1);
  161.             }
  162.         }
  163.         printf("final\n");
  164.         close(n_sd);
  165.         fclose(file);
  166.     }
  167.  
  168.     close(sd);
  169.  
  170.  
  171. return 0;
  172.  
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement