Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <errno.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #define MAXBUFFER 512
- #define PUERTO 4950
- int main(int argc, char * argv[]){
- int sd, n_sd;
- struct sockaddr_in server,cliente;
- socklen_t longCliente = sizeof(cliente);
- char buffer[MAXBUFFER];
- if((sd=socket(PF_INET,SOCK_STREAM,0)) < 0){
- perror("socket");
- exit(1);
- }
- memset(&server,0,sizeof(server));
- server.sin_family = AF_INET;
- server.sin_port = htons(PUERTO);
- server.sin_addr.s_addr = INADDR_ANY;
- if(bind(sd,(struct sockaddr *)&server, sizeof(server)) < 0){
- perror("bind");
- exit(1);
- }
- if(listen(sd,5) < 0){
- perror("listen");
- exit(1);
- }
- while(1){
- printf("Esperando conexión...\n");
- n_sd = accept(sd,(struct sockaddr *)&cliente, &longCliente);
- if(n_sd < 0){
- perror("accept");
- close(sd);
- exit(1);
- }
- FILE * file = fopen("claves.txt","r");
- if(file == NULL){
- perror("fopen");
- close(n_sd);
- close(sd);
- exit(1);
- }
- uint32_t longBigEndian;
- if((read(n_sd,&longBigEndian,sizeof(uint32_t))) != sizeof(uint32_t)){
- perror("longBigEndian");
- close(n_sd);
- close(sd);
- exit(1);
- }
- int longitud = ntohl(longBigEndian);
- if((read(n_sd,buffer,longitud)) != longitud){
- perror("buffer");
- close(n_sd);
- close(sd);
- exit(1);
- }
- buffer[longitud] = '\0';
- char linea[MAXBUFFER];
- int encontrado = 0;
- char * user;
- char * pass;
- uint32_t cero = htonl(0);
- uint32_t m_uno = htonl(-1);
- while(fgets(linea,MAXBUFFER-1,file) != NULL){
- linea[strlen(linea)-1] = '\0';
- char * arroba = strstr(linea, "@");
- *arroba = '\0';
- user = linea;
- pass = arroba+1;
- if(strcmp(buffer,user) == 0){
- encontrado = 1;
- break;
- }
- }
- printf("%s\n",user);
- printf("%s\n",pass );
- if(encontrado == 1){
- int encontrado_pass = 0;
- if(write(n_sd,&cero,sizeof(uint32_t)) != sizeof(uint32_t)){
- perror("write");
- close(n_sd);
- close(sd);
- exit(1);
- }
- //Contraseña
- if((read(n_sd,&longBigEndian,sizeof(uint32_t))) != sizeof(uint32_t)){
- perror("longBigEndian");
- close(n_sd);
- close(sd);
- exit(1);
- }
- int longitud = ntohl(longBigEndian);
- if((read(n_sd,buffer,longitud)) != longitud){
- perror("buffer");
- close(n_sd);
- close(sd);
- exit(1);
- }
- if(strcmp(buffer,pass) == 0){
- encontrado_pass = 1;
- }
- if(encontrado_pass == 1){
- if(write(n_sd,&cero,sizeof(uint32_t)) != sizeof(uint32_t)){
- perror("write");
- close(n_sd);
- close(sd);
- exit(1);
- }
- }else{
- if(write(n_sd,&m_uno,sizeof(uint32_t)) != sizeof(uint32_t)){
- perror("write");
- close(n_sd);
- close(sd);
- exit(1);
- }
- }
- }else{
- if(write(n_sd,&m_uno,sizeof(uint32_t)) != sizeof(uint32_t)){
- perror("write");
- close(n_sd);
- close(sd);
- exit(1);
- }
- }
- printf("final\n");
- close(n_sd);
- fclose(file);
- }
- close(sd);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement