Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Frijolito

#61
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Podrías poner antes del ingreso fflush(stdin); pero no se si es lo más recomendado.

Saludos,

Tambien lo intente y no funciona no se que pasa yo creo que mejor lo programo en c++ que creo que sera mas facil
#62
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Probá:

fgets(frase, sizeof(frase), stdin);

Saludos,

Sigue sin funcionar, aunque por lo que vi debería me parece erra me pasa lo mismo que antes que se salta esa petición y pasa a la siguiente, mandaría foto pero es lo mismo que lo de arriba
#63
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Fíjate si te sirve:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos Frijolito

No se si yo hice algo mal pero uso el "scanf("%1024[^\n]", frase)" se salta a la siguiente scanf que es cuando pregunta el ROT del cifrado

img: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos
#64
Hola tengo un problema que es muy simple, antes en C++ usaba el "cin.getline()" para guardar una string con espacios pero estoy haciendo un programa en C y no me guarda los espacios, quería ver si alguien me ayuda ya que creo que es bastante simple, gracias de antemano

Código: c
void CifradoCersar(){

char frase[1024];
char *p=getenv("USER");

int lfrase;
int n;
int dif;

printf("\n [>>] Cual la frase que quieres cifrar \n");
printf("  %s~$: ",p);
scanf("%s", frase);

printf("\n [>>] Cuantos espacios se corraran los digitos? \n");
printf("  %s~$: ",p);
scanf("%d", &n);

dif = 26 - n;
lfrase = strlen(frase);
/* UBYN */

int i;
while (i == lfrase ){
if(frase[i] + n > 'z'){
frase[i] = frase[i] - dif;
}
else{
frase[i] = frase[i] + n;
}
i++;
}

printf("\n   [>>] La frase cifrada es  : ");
printf("%s", frase);
i = 0;

while (frase[i] != '\0'){
if(frase[i] - n < 'a'){
frase[i] = frase[i] + dif;
}
else{
frase[i] = frase[i] - n;
}
i++;
}

printf("\n   [>>] La frase original es : ");
printf("%s\n",frase);

}
#65
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola Amigos! sería posible que alguien me resuma (sin entrar en detalles técnicos) o me explique, si es posible que una persona cualquiera sin preparación técnica, pueda HACKEAR celulares con solo poseer los números de MAC de cada uno de esos celulares?
Con Hackear me refiero a que desde algun ordenador u otro celular, pueda entrar al celular atacado y escuchar las conversaciones, entrar al Home Bancking y ver las cuentas bancarias, leer todos los mensajes, etc etc etc? sin que el propietarios del celular atacado se de cuenta? Es posible todo esto que digo con solo el MAC y ninguna otra cosa?
Si fuera posible, ademas del MAC, es necesario que cuente con algún programa especial? (no me interesa saber cual, solo necesito saber si es posible, si o no!)
Para hacer esta clase de ataque, tiene que ser una persona preparada o cualquier persona sin conocimiento puede hacerlo? Solo eso! Muchas gracias

Tengo entendido que la direccion MAC opera en la capa 2( Significa que no llega a Internet solo a la red local), entonces solo podrías empezar a atacar en una red local y después decirle al programa que uses que haga que funcione de forma mas "global" , ahora sin conocimientos no se si puedas pero probablemante existen  programas que lo hacen automáticamente aunque si no sabes lo que haces no creo que funciona
#66
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Haceme un favor subile los tiempos de espera en el server y el client a ver que pasa:

struct timeval tv;
tv.tv_sec = 6;
tv.tv_usec = 3000;
setsockopt(sock_client, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof tv);

Me parece que puede ser el mismo problema que tenía yo.

Saludos,

Lo hice y sigue sin funcionar la verdad ya no se que puede ser
#67
Eso me muestra

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#68
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Lo primero que veo es que nunca lee los datos del servidor por que llegada esa instancia la variable intentos nunca es mayor a 0:

Código: c
   int intentos = 0;

                        if(intentos > 0){

                                read(sock_client, PC,   512);
                                read(sock_client, USER, 512);
                                read(sock_client, OS,   512);
                                read(sock_client, IP,   512);
                        }

                        intentos++;


Saludos,

Saque esa parte en cuanto lo vi, pero sigue sin funcionar, me falto editar el post lo cambio altiro
#69
La verdad lo que queria era poder evitar usar Firezilla y hacerlo desde 0 para apreder nomas porque en verdad no necesito un servidor con urgencia en este momento solo era curiosidad y hacer  algo para no aburrirme
#70
Dudas y pedidos generales / Problema con sockets en c
Octubre 26, 2018, 12:28:26 AM
Hola, la verdad estoy haciendo un programa que la gracia es que me diga el nombre el pc, el user actual, el sistema operativo y la ip de donde se esta ejecutando el servidor pero no se porque no funciona, los mensajes no llegan. Ademas copie el codigo de otro servidor que estaba haciendo porque la primera parte es la misma. Esta hecho en Linux Ubuntu, si me pueden ayudar de verdad los amaria e estado todo el dia partiéndome la cabeza con esto.

servidor:
Código: c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/wait.h>

#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>

#define PUERTO 15560
#define MAXCLIENT 3


int shell(int sock_client, struct sockaddr_in client, struct sockaddr_in server);

int main(){

    fd_set rfds;        // Conjunto de descriptores a vigilar
   
    int sock_host;
    int sock_client;

    int childpid;
    int codigo_de_salida;
    int childcount = 0;
    int pidstatus;

    socklen_t longclient;
   
    sock_host = socket(AF_INET,SOCK_STREAM,0);
   
    struct sockaddr_in server, client;
    bzero((char *)&server, sizeof(server));
    server.sin_family       = AF_INET;
    server.sin_port         = htons(PUERTO);
    server.sin_addr.s_addr  = INADDR_ANY;

    struct timeval tv;
    tv.tv_sec = 0;
    tv.tv_usec = 500;    //Tiempo de espera
     
    if(bind(sock_host, (struct sockaddr *)&server, sizeof(server)) < 0){ //asignamos un puerto al socket
        printf("  [!!]Error al asociar el puerto a la conexion\n");
        close(sock_host);
        return 1;
    }

    if(listen(sock_host, 10) == -1){
        printf("  [!!]No se pude escuchar en el puerto seleccionado\n");
    }
   
    longclient = sizeof(client);
    while(free){

        //Selec se carga con el valor de rfds

        FD_ZERO(&rfds);
        FD_SET(sock_host, &rfds);

        if(select(sock_host+1, &rfds, NULL, NULL, &tv)){
            if(sock_client = accept(sock_host, (struct sockaddr *)&client, &longclient) != -1){

            printf("[>>] Conectando con %s\n", inet_ntoa(client.sin_addr));
                switch (childpid = fork()){
                    case -1:
                        printf("  [!!]Error al crear el thread\n");break;
                    case  0:
                        if(childcount < MAXCLIENT){
                        shell(sock_client, client, server);
                        }else{
                        printf("  [!!]Ya estas conectado");
                        }
                        break;
                    default:
                        childcount++;
                        close(sock_client);
                        break;
                }
            }else{
                printf("  [!!]Error al intentar aceptar la conexion\n");
            }
        }
        childpid = waitpid(0, &pidstatus, WNOHANG);

        if(childpid>0){
            childcount--;    //Acaba de desconectarse un cliente
        }
    }
    return 0;
}

int shell(int sock_client, struct sockaddr_in client, struct sockaddr_in server){

char comando[512];

char *pc = getenv("COMPUTERNAME");
char *user = getenv("USER");
char os[512] = "Aun no se hacer eso. \n";
char *ip = inet_ntoa(server.sin_addr);

sleep(1);

printf("  [>>] En la funcion shell\n");

write(sock_client, "    [>>] Listo para recivir informacion \n",42);

while(free){

bzero(comando, 512);
read(sock_client, comando, strlen(comando));
printf("%s",comando );

if(strncmp(comando, "info", 4) == 0){

printf("[>>] Enviando la informacion\n");

send(sock_client, pc, strlen(pc),0);
send(sock_client, user, strlen(user),0);
send(sock_client, os, strlen(os), 0);
send(sock_client, ip, strlen(ip),0);

}
}
return 0;
}


cliente:
Código: c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
     
#define BUFFSIZE 1
#define PUERTO 15560
     
int shell (int sock_client, struct sockaddr_in client);
     
int main(){
     
    char buffer[512];
    int sock_client;
    sock_client = socket(AF_INET,SOCK_STREAM,0);
     
    struct hostent *server;
    server = gethostbyname("localhost");
     
    struct sockaddr_in client;
    bzero((char *)&client, sizeof(client));
    client.sin_family       = AF_INET;
    client.sin_port         = htons(PUERTO);
    client.sin_addr     = *((struct in_addr *)server->h_addr);
     
    if(connect(sock_client,(struct sockaddr *)&client, sizeof(client)) < 0){
        printf("Error al conectar con el host\n");
        return 1;
    }

    printf("[>>] Conectando con %s",inet_ntoa(client.sin_addr));
    printf("\n");
   
    read(sock_client, buffer, 512);

    shell(sock_client, client);
printf("%s", buffer);
}

int shell(int sock_client, struct sockaddr_in client){

char command[512];

char help[512] = "help";
char close[512] = "close";
char info[512] = "info";
char clear[512] = "clear";
char HELP[1024] = "\n  [HELP MENU] \n    [HELP - Muestra este menu]\n    [Close - Cierra el menu]\n    [Info - Muestra informacion del target]\n    [Clear - Limpea la terminal ]\n\n";

char PC[512];
char USER[512];
char OS[512];
char IP[512];

char *p = getenv("USER");
printf(" [>>] Sesion de Shell iniciada. \n");
read(sock_client, command, 512);
printf("%s", command );

while(free){
printf("   %s@%s:~$ ",p , inet_ntoa(client.sin_addr));
bzero(command, 512);
fgets(command, 512 , stdin);

write(sock_client, command, 512);
printf("%s", command);

if(strncmp(command,help,4) == 0){
printf("%s",HELP);
}
if(strncmp(command,close,5) == 0){
write(sock_client, close , strlen(close));
printf("[>>] Cerrardo... \n");
exit(1);
}
if(strncmp(command,info,4) == 0){
printf("    [>>]Esperando la informacion. \n");

read(sock_client, PC,   512);
read(sock_client, USER, 512);
read(sock_client, OS,   512);
read(sock_client, IP,   512);

printf("      El PC es    -- %s\n", PC    );
printf("      El USER es  -- %s\n", USER  );
printf("      El OS es    -- %s\n", OS    );
printf("      la IP es    -- %s\n\n", IP  );

}
if(strncmp(command,clear,5) == 0){
system("clear");
}
}
return 0;
}

#71
La verdad instale kali linux para hacer una cosita y al final lo deje instalado porque es comodo de uso normal, y como ahora lo uso de forma normal queria jugar lol y instale wine y uso lutris para instalarlo pero al iniciar la partida me tira bug splat, busque la solucion como si fuera debian pero tampoco funciona, se que el tema es algo random pero igual si alguien sabe la solucion seria de mucha ayuda
#72
Dudas y pedidos generales / Re:Info de fotos
Octubre 22, 2018, 02:58:44 AM
Para eso tienes que ver los metadatos de las fotos, el problema es que si fueron enviadas por whatapp facebook y telegram(no estoy seguro) borran esos datos para el paquete de info sea mas pequeno.

los metadatos guardan datos como; marcas, ip , gps si es que el dispositivo lo tiene , apertura, iso, obturacion y esas cosas
#73
Muy buen post aunque no lo segui en java sino en C me sirvio muchisimo para entender <3
#74
Dudas y pedidos generales / Servidor FTP en C
Octubre 21, 2018, 07:04:02 PM
Hola, la verdad es que quiero hacer un servidor ftp y tengo un pc viejo para hosterar. Programe un cliente y servidor por sockets, pero quiero poder almacenar archivos en el servidor . Se que existe FireZilla pero quiero hacer todo desde 0 para poder entender mas del tema, si alguien me puede guiar con el tema seria de mucha ayuda, gracias de antemano y disculpa por preguntar lo mismo tantas veces. voy a dejar el código del servidor (Todo esta hecho en linux, creo que es importante aclarar eso)

Código: c
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>

#define PUERTO     2000
int main(){
    socklen_t longc;
    int socket_host;
    int socket_cliente;

    char buffer[512];

    socket_host = socket(AF_INET, SOCK_STREAM,0);

    struct sockaddr_in servidor, cliente;
    bzero((char * )&servidor, sizeof(servidor));

    servidor.sin_family = AF_INET;
    servidor.sin_port   = htons(PUERTO);
    servidor.sin_addr.s_addr = INADDR_ANY; 

    if(bind(socket_host,(struct sockaddr *)&servidor, sizeof(servidor)) == -1){
        printf("Error en el bind\n");
        return 1;
    }
    printf("Direccion %s:%d\n", inet_ntoa(servidor.sin_addr), htons(PUERTO));
    listen(socket_host, 2);

    while(free){
        longc = sizeof(cliente); // TAMANO DE LA ESTRUCTURA CLIENTE
        socket_cliente = accept(socket_host,(struct sockaddr *)&cliente, &longc);
        printf("Escuchando en el puerto %d\n", ntohs(cliente.sin_port));

        recv(socket_cliente,buffer,512,0);
        printf("%s",buffer);
        send(socket_cliente,"listo\n",7,0);
    }
    return 0;
}
#75
Hola, la cosa es que quería hacer en C un  servidor en el que pudiera descargar o subir archivos desde la terminal de linux o desde un cliente que yo programara  o desde Internet y que apareciera asi "127.0.0.1:8080/archivo". Tambien creo que es importante decir que todo esto esta hecho en Linux . Por Internet encontré programas que hacen ftp servers como FileZilla y que solo necesitas programar el cliente para el servidor, pero lo que quiero hacer es programar el servidor desde 0 para poder entender mas sobre el tema y después programar el cliente y hacer mas cosas con el. Voy a dejar el código del servidor que e programado. De todas formas gracias de antemano.

Código: c

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/sendfile.h>               //Sirve para poder enviar archivos
#include <sys/types.h>                  //Sirve para poder recivir archivos
#include <linux/if_packet.h>
#include <net/if.h>                     // Cliente en cuention
     
#define BUFFSIZE 1
#define ERROR -1
#define BUFFERSIZE 512

// Funciones //
     
int login(int socket_cliente);
void direccip(int socket_cliente, struct sockaddr_in addr);
void salir(int socket_servidor, int socket_cliente);
void enviar(int socket_cliente, FILE* archivo);
int intentos = 0;
     
int main(){

    int socket_servidor;            //Socket del servidor para escuchar mensajes
    int socket_cliente;             //Socket del cliente para enviar mesajes
    int puerto = 8080;                //Numero de puerto en /etc/service
    char BUFFER[BUFFERSIZE];        //Mensaje para usar los comandos

    socket_servidor = socket(AF_INET, SOCK_STREAM, 0);
    socklen_t longc;

   // Declaracion de las escructuras;
    struct sockaddr_in servidor, cliente;                   //Creamos las estructuras del cliente y servidor al mismo tiempo
    bzero((char *)&servidor, sizeof(servidor));             //Primero llenamos de 0's la struct
    servidor.sin_family = AF_INET;                          //Asiganamos la estructura
    servidor.sin_port = htons(puerto);                      //Indicamos el puerto
    servidor.sin_addr.s_addr = INADDR_ANY;                  //Esta macro especifica nuestra direccion
     
    if(bind(socket_servidor, (struct sockaddr *)&servidor, sizeof(servidor)) < 0){ //asignamos un puerto al socket
        printf("Error al asociar el puerto a la conexion\n");
        return 1;
    }
           
    listen(socket_servidor,3);                              //Escuchamos por este puero maximo 2 clientes distintos
    while(free){
        intentos = 0;
        printf("Escuchando en el puerto %d\n", ntohs(servidor.sin_port));
        longc = sizeof(cliente);                                //Asignamos el tamano de la estructura a esta variable
        socket_cliente = accept(socket_servidor, (struct sockaddr *)&cliente, &longc); // Esperamos una conexion
        if(socket_cliente == -1){
            printf("Error en al conexion\n");
         return 1;
        }
        printf("Conectando con %s:%d\n",inet_ntoa(cliente.sin_addr),htons(cliente.sin_port));
     
    //Login con el servidor
        int conexion = login(socket_cliente);
        printf("\n");
        if(conexion == 1){
            while(free){
                bzero(BUFFER, BUFFERSIZE);
                recv(socket_cliente,BUFFER,50,0);
                if(strncmp(BUFFER,"IP",2) == 0){
                    direccip(socket_cliente, cliente);
                }
                if(strncmp(BUFFER,"EXIT", 4) == 0){
                    salir(socket_servidor, socket_cliente);
                }
            }
        }
    }
}

int login(int socket_cliente){
           
    char user[8];
    char pass[8];

    if(intentos == 3){
        close(socket_cliente);
        return 0;
    }

    memset(user,0 , 8);
    memset(pass,0 , 8);
    printf("%i",intentos );
    printf("\n");

     
    send(socket_cliente,"Usuario: ",10,0);
    read(socket_cliente,user,9);
    send(socket_cliente, "Contrasena: ", 12, 0);
    read(socket_cliente, pass, 8);
     
    if(strncmp(user, "root",4) == 0){
        if(strncmp(pass, "root",4) == 0){
            send(socket_cliente,"Bienvenido\n",12,0);
        }else{
            send(socket_cliente,"ERROR\n",7,0);
            intentos = intentos + 1;
            login(socket_cliente);
        }
    }else{
        send(socket_cliente,"ERROR\n",7,0);
        intentos = intentos + 1;
        login(socket_cliente);
    }
}
     
void direccip(int socket_cliente, struct sockaddr_in addr){
    write(socket_cliente, "Tu eres: ",9);
    write(socket_cliente, inet_ntoa(addr.sin_addr), 16);
    write(socket_cliente,"\n",2);
}

void salir(int socket_servidor, int socket_cliente){
    write(socket_cliente, "ADIOS ;)\n", 10);
    close(socket_cliente);
}

#76
Tengo programado un servidor con protocolo tpc/ip y se puede conectar por telnet de lo mas bien. Pero quiero tambien que se pueden subir y bajar archivos del servidor y la verdad no se de eso, pero la gracias es que sea solo usando el comando telnet o ftp de la terminal de linux pero si no se puede de esa forma tendré que programar el cliente. gracias de antemano.
#77
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Así funciona bien el login fallido y no tira error.
Lo que si fíjate cuando haces log-in bien, a mi es como que no se me limpia el buffer de entrada y me inserta un salto por lo que no me deja ingresar bien la contraseña nunca, pero si a vos te funcionaba bien esa parte la dejé igual que siempre.

Código: c++

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/sendfile.h>               //Sirve para poder enviar archivos
#include <sys/types.h>                  //Sirve para poder recivir archivos
#include <linux/if_packet.h>
#include <sys/ioctl.h>                  // Estas 2 librerias son para poder saber algunos datos sobre el
#include <net/if.h>                             // Cliente en cuention

#define BUFFSIZE 1
#define ERROR -1

// Funciones //

int login(int socket_cliente, char user[9], char pass[8]);
void direccip(int socket_cliente, struct sockaddr_in addr);
void salir(int socket_servidor, int socket_cliente);
void enviar(int socket_cliente, FILE* archivo);
int intentos = 0;

int main(){

        int socket_servidor;            //Socket del servidor para escuchar mensajes
        int socket_cliente;                     //Socket del cliente para enviar mesajes
        int puerto = 15560;                     //Numero de puerto en /etc/service
        char indicered[100];            //Inidece de red
        char texto[50];                         //Mensaje para usar los comandos
        char pass[8];                           //Contrasena
        char user[9];                           //Usuario
        FILE * archivo;                         //Archivo sin formato

        socket_servidor = socket(AF_INET, SOCK_STREAM, 0);
        socklen_t longc;

        // Declaracion de las escructuras;
        struct sockaddr_in servidor, cliente;           //Creamos las estructuras del cliente y servidor al mismo tiempo
        bzero((char *)&servidor, sizeof(servidor)); //Primero llenamos de 0's la struct
        servidor.sin_family = AF_INET;                          //Asiganamos la estructura
        servidor.sin_port = htons(puerto);                      //Indicamos el puerto
        servidor.sin_addr.s_addr = INADDR_ANY;          //Esta macro especifica nuestra direccion

        if(bind(socket_servidor, (struct sockaddr *)&servidor, sizeof(servidor)) < 0){ //asignamos un puerto al socket
                printf("Error al asociar el puerto a la conexion\n");
        return 1;
        }
        listen(socket_servidor,3);                              //Escuchamos por este puero maximo 2 clientes distintos
        printf("Escuchando en el puerto %d\n", ntohs(servidor.sin_port));
        longc = sizeof(cliente);                                //Asignamos el tamano de la estructura a esta variable
        socket_cliente = accept(socket_servidor, (struct sockaddr *)&cliente, &longc); // Esperamos una conexion
        if(socket_cliente == -1){
                printf("Error en al conexion\n");
                return 1;
        }
        printf("Conectando con %s:%d\n",inet_ntoa(cliente.sin_addr),htons(cliente.sin_port));

        //Login con el servidor

        int conexion = login(socket_cliente, user, pass);

        //Hablar con el servidor
       if(conexion == 1){
        while(free){
                bzero(texto, sizeof(texto));
                recv(socket_cliente,texto,50,0);
                if(strncmp(texto,"IP",2) == 0){
                        direccip(socket_cliente, cliente);
                }
                if(strncmp(texto,"EXIT", 4) == 0){
                        salir(socket_servidor, socket_cliente);
                }
                if(strncmp(texto,"DESCARGAR", 9) == 0){
                        enviar(socket_cliente, archivo);
                }
        }
        }else{
                printf("Ingreso 3 veces mal usuario");
                system("pause");
                close(socket_servidor);
        }
}
int login(int socket_cliente, char user[9], char pass[8]){

        bzero(user, 9);
        bzero(pass, 8);

         if(intentos == 3){
                close(socket_cliente);
                return 0;
         }

        send(socket_cliente,"Usuario: ",10,0);
        read(socket_cliente,user,9);
        send(socket_cliente, "Contrasena: ", 12, 0);
        read(socket_cliente, pass, 8);

        if(strncmp(user, "frijolito",9) == 0 && strncmp(pass, "abc12345",8) == 0){
             return 1;
        }
        else{
                send(socket_cliente,"Error\n", 7,0);
                intentos = intentos + 1;
                login(socket_cliente, user, pass);

        }
}

void direccip(int socket_cliente, struct sockaddr_in addr){
    write(socket_cliente, "Tu eres: ",9);
    write(socket_cliente, inet_ntoa(addr.sin_addr), 16);
    write(socket_cliente,"\n",2);
}
void salir(int socket_servidor, int socket_cliente){
        write(socket_cliente, "ADIOS ;)\n", 10);
        close(socket_servidor);
        close(socket_servidor);
        exit(1);
}
void enviar(int socket_cliente, FILE * archivo){
        char buffer[BUFFSIZE];
        char mensaje[80];
        archivo = fopen("lena.png", "rb");
        if(!archivo){
                printf("Error al abrir el archivo\n");
                send(socket_cliente,"error al abrir el archivo",26,0);
        }
        while(!feof(archivo)){
                fread(buffer,sizeof(char),BUFFSIZE, archivo);
                if(send(socket_cliente,buffer,BUFFSIZE,0) == ERROR){
                        perror("Error al enviar el arvhivo:");
                }
        }
}


probalo, vas a ver que no crashea y cierra la conexion tras 3 ingresos fallidos.

Saludos,

El código funciona y gracias por eso, pero el problema es que el servidor tambien se cierra al poner 3 veces mal las credenciales la idea es que solo se saque al cliente no al server
#78
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola no estoy seguro que sea esto pero podrías probar.
Cuando le haces un close socket cliente, luego sigues enviandole cosas, deberìas poner un return si fallo 3 veces:

Código: c++

void login(int socket_cliente, char user[9], char pass[8]){
        int intentos = 0;
        bzero(user, 9);
        bzero(pass, 8);

         if(intentos == 3){
                close(socket_cliente);
                return;
        }

        send(socket_cliente,"Usuario: ",10,0);
        read(socket_cliente,user,9);
        send(socket_cliente, "Contrasena: ", 12, 0);
        read(socket_cliente, pass, 8);


Y lo mismo luego, al salir de la funciòn aunque el login haya fallado sigues usando socket_cliente, deberías hacer que en lugar de retornar void, login retorne un int o un bool, que si se conecta bien devuelva 1 y si no 0, entonces si devuelve 0 no utilizas màs socket_cliente ya que lo cerraste, si no te sale ahora en un rato vengo y te ayudo a modificarlo.

Saludos,

gracias me a ayudado mucho y solo era un pequeno error gracias <3
#79
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola mira yo creo que todo esto viene por que intentas crear un sistema anti fuerza bruta.

La idea sería que cuando un usuario hace un log-in fallido guardes en una base de datos (mysql va bien con ubuntu) el ip la fecha y hora.
Luego cada vez que quiere conectarse haces un select a ese ip para contar todos los intentos fallidos en un intervalo de tiempo, es decir si por ejemplo hizo 10 en una hora no lo dejas conectarse por 12 horas.

El problema que tiene esto es que si se conectan desde la misma red por ejemplo wifi o un cibercafe todos tienen la misma ip pública por lo que confundes 2 usuarios con 1 solo, pero no está del todo mal para comenzar.

Con que los reconozcas por ID quiero hacer énfasis a que por ejemplo en el server cuando llegan o salen mensajes tengas una lista de clientes   list[i_ClientID]->Enviar_Datos(); entonces tu los reconoces por el ID y no caes en la trampa de reconocerlos por ip ya que puede haber 2 clientes con el mismo ip y le mandas mensajes al cliente equivocado.
Supongo que de algún modo ya estas reconociéndolos.

Con respecto al error que te tira, no estoy demasiado ducho en el tema, pero si compartes el código es posible que alguien pueda ayudarte.

Saludos,
ese es el codigo si me puedes ayudar con el problema, gracias de antemano <3
Código: c

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/sendfile.h> //Sirve para poder enviar archivos
#include <sys/types.h> //Sirve para poder recivir archivos
#include <linux/if_packet.h>
#include <sys/ioctl.h> // Estas 2 librerias son para poder saber algunos datos sobre el
#include <net/if.h> // Cliente en cuention

#define BUFFSIZE 1
#define ERROR -1

// Funciones //

void login(int socket_cliente, char user[9], char pass[8]);
void direccip(int socket_cliente, struct sockaddr_in addr);
void salir(int socket_servidor, int socket_cliente);
void enviar(int socket_cliente, FILE* archivo);

int main(){

int socket_servidor; //Socket del servidor para escuchar mensajes
int socket_cliente; //Socket del cliente para enviar mesajes
int puerto = 15560; //Numero de puerto en /etc/service
char indicered[100]; //Inidece de red
char texto[50]; //Mensaje para usar los comandos
char pass[8]; //Contrasena
char user[9]; //Usuario
FILE * archivo; //Archivo sin formato

socket_servidor = socket(AF_INET, SOCK_STREAM, 0);
socklen_t longc;

// Declaracion de las escructuras;
struct sockaddr_in servidor, cliente; //Creamos las estructuras del cliente y servidor al mismo tiempo
bzero((char *)&servidor, sizeof(servidor)); //Primero llenamos de 0's la struct
servidor.sin_family = AF_INET; //Asiganamos la estructura
servidor.sin_port = htons(puerto); //Indicamos el puerto
servidor.sin_addr.s_addr = INADDR_ANY; //Esta macro especifica nuestra direccion

if(bind(socket_servidor, (struct sockaddr *)&servidor, sizeof(servidor)) < 0){ //asignamos un puerto al socket
    printf("Error al asociar el puerto a la conexion\n");
    return 1;
}
listen(socket_servidor,3); //Escuchamos por este puero maximo 2 clientes distintos
printf("Escuchando en el puerto %d\n", ntohs(servidor.sin_port));
longc = sizeof(cliente); //Asignamos el tamano de la estructura a esta variable
socket_cliente = accept(socket_servidor, (struct sockaddr *)&cliente, &longc); // Esperamos una conexion
if(socket_cliente == -1){
printf("Error en al conexion\n");
return 1;
}
printf("Conectando con %s:%d\n",inet_ntoa(cliente.sin_addr),htons(cliente.sin_port));

//Login con el servidor

login(socket_cliente, user, pass);

//Hablar con el servidor

while(free){
bzero(texto, sizeof(texto));
recv(socket_cliente,texto,50,0);
if(strncmp(texto,"IP",2) == 0){
direccip(socket_cliente, cliente);
}
if(strncmp(texto,"EXIT", 4) == 0){
salir(socket_servidor, socket_cliente);
}
if(strncmp(texto,"DESCARGAR", 9) == 0){
enviar(socket_cliente, archivo);
}
}
}
void login(int socket_cliente, char user[9], char pass[8]){
        int intentos = 0;
bzero(user, 9);
bzero(pass, 8);

if(intentos == 3){
close(socket_cliente);
}

send(socket_cliente,"Usuario: ",10,0);
read(socket_cliente,user,9);
send(socket_cliente, "Contrasena: ", 12, 0);
read(socket_cliente, pass, 8);

if(strncmp(user, "frijolito",9) == 0 && strncmp(pass, "abc12345",8) == 0){
}
else{
send(socket_cliente,"Error\n", 7,0);
intentos = intentos + 1;
login(socket_cliente, user, pass);
}
}

void direccip(int socket_cliente, struct sockaddr_in addr){
    write(socket_cliente, "Tu eres: ",9);
    write(socket_cliente, inet_ntoa(addr.sin_addr), 16);
    write(socket_cliente,"\n",2);
}
void salir(int socket_servidor, int socket_cliente){
write(socket_cliente, "ADIOS ;)\n", 10);
close(socket_servidor);
close(socket_servidor);
exit(1);
}
void enviar(int socket_cliente, FILE * archivo){
char buffer[BUFFSIZE];
char mensaje[80];
archivo = fopen("lena.png", "rb");
if(!archivo){
printf("Error al abrir el archivo\n");
send(socket_cliente,"error al abrir el archivo",26,0);
}
while(!feof(archivo)){
fread(buffer,sizeof(char),BUFFSIZE, archivo);
if(send(socket_cliente,buffer,BUFFSIZE,0) == ERROR){
perror("Error al enviar el arvhivo:");
}
}
}
#80
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Puedes reconocer al cliente por un ID que es lo más indicado ya que 2 clientes pueden tener el mismo IP, entonces cuentas sus conexiones fallidas y cierras la conexión del socket con close.

Así puedas identificar el cliente por un ID, sería bueno que tengas en cuenta lo del IP por si más adelante sientes necesidad de bannear ips.

Más adelante en un sistema más avanzado podrías pedir que se te brinde el hwid o algo similar para banear por hardware id.

Saludos,

El ID del cliente se encuentra a en estructura sockaddr_in ?  al hacer 3 intentos y que fallen los 3 lo que pasas es que uso el close(socket del cliente) pero en la terminal del servidor me dice "Violación de segmento (`core' generado)"  y se cierra el servidor, para conectarme al servidor uso el comando telnet no se si el problema es usar el telnet o tendría que programar un cliente