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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 22
41  Programación / Programación C/C++ / Re: Send() return -1 en C en: 2 Noviembre 2012, 01:40 am
Una pregunta....¿Es posible que el error sea por que creo 2 sockets? es decir, ¿una aplicacion de C en linux solo puede abrir un solo sockect?

Es que ya no se me ocurren mas ideas....
42  Programación / Programación C/C++ / Send() return -1 en C en: 1 Noviembre 2012, 02:56 am
¡Buenas a todos!

Tengo un problema con la funcion send(). Siempre me retorna -1 y no se porque....

El socket lo creo asi:
Código
  1. int CreateRawSocket(int protocol_to_sniff){
  2. //Crea un raw socket
  3.        int rawsock;
  4.        if((rawsock = socket(PF_PACKET, SOCK_RAW, htons(protocol_to_sniff)))== -1)
  5.        {
  6.                perror("Error creating raw socket: ");
  7.                exit(-1);
  8.        }
  9.  
  10.  
  11.        return rawsock;
  12. }

El bind lo hago asi:
Código
  1. int BindRawSocketToInterface(char *device, int rawsock, int protocol){
  2. //Hace un bind del socket con la interfaz de red
  3.  
  4.        struct sockaddr_ll sll;
  5.        struct ifreq ifr;
  6.  
  7.        bzero(&sll, sizeof(sll));
  8.        bzero(&ifr, sizeof(ifr));
  9.  
  10.        strncpy((char *)ifr.ifr_name, device, IFNAMSIZ);
  11.        if((ioctl(rawsock, SIOCGIFINDEX, &ifr)) == -1)
  12.        {
  13.                printf("Error getting Interface index !\n");
  14.                exit(-1);
  15.        }
  16.  
  17.        sll.sll_family = AF_PACKET;
  18.        sll.sll_ifindex = ifr.ifr_ifindex;
  19.        sll.sll_protocol = htons(protocol);
  20.  
  21.  
  22.        if((bind(rawsock, (struct sockaddr *)&sll, sizeof(sll)))== -1)
  23.        {
  24.                perror("Error binding raw socket to interface\n");
  25.                exit(-1);
  26.        }
  27.  
  28.        return 1;
  29.  
  30. }

Luego creo un char * con los datos a enviar y lo envio con esta funcion:
Código
  1. int SendRawPacket(int rawsock, char *pkt, int pkt_len){
  2. //Envia un raw packet
  3.        int sent=0;
  4.  
  5.        if((sent = send(rawsock, pkt, pkt_len,TH_FLAGS)) != pkt_len)
  6.        {
  7.                /* Error */
  8.                printf("Could only send %d bytes of packet of length %d\n", sent, pkt_len);
  9.                return 0;
  10.        }
  11.  
  12.        return 1;
  13. }

Y la funcion send() siempre me retorna -1 y no se porque...El socket esta bien creado...lo he mirado con gdb y tengo la variable rawsock=8. Y la variable pkt_len=strlen(pkt)=54

Si el socket esta bien creado y el bind es correcto...¿Por que no me envia los datos?

Gracias, un saludo.
43  Seguridad Informática / Hacking / Re: wireshark "bytes in flight" en: 31 Octubre 2012, 02:00 am
Nada, al final esto fue un fallo tonto que tuve....

Wireshark no me detectaba mis paquetes HTTP porque la cabecera HTTP no era correcta. El campo "Content-Length" lo habia escrito sin una "t"....."Content Lengh"....en cuanto lo corregi, wireshark me lo detecto como un paquete HTTP.

Gracias, un saludo.
44  Programación / Programación C/C++ / Re: Romper ejecucion de un bucle en: 31 Octubre 2012, 01:55 am
¡Gracias por sus respuestas!

Al final el codigo me ha quedado asi...
Código
  1. #include <stdio.h>
  2. #include <pthread.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5.  
  6. void * pararBucle();
  7.  
  8. char * c="a";
  9.  
  10. int main(){
  11.  
  12.        pthread_t hilo;
  13.        pthread_create(&hilo,NULL, pararBucle,NULL);
  14.  
  15.        printf("Iniciando bucle infinito\n");
  16.        while(strcmp(c,"q")){
  17.  
  18.        }
  19.  
  20.        return 0;
  21. }
  22.  
  23. void * pararBucle(){
  24.  
  25.        char  aux='a';
  26.        while(aux!='q')
  27.                read(STDIN_FILENO,&aux,1);
  28.        printf("Presionaste q\n");
  29.        c="q";
  30.        return (void *)"q";
  31. }

Lo unico que tiene una variable global que no se como quitar.
He probado a pasarle la variable c a la funcion pthread_create() asi:
Código
  1. pthread_create(&hilo,NULL, pararBucle,(void *) c);

Y luego le paso un void * a  la funcion pararBucle(void * c){}
Con estos cambios el programa compila, pero la funcion pararBucle cuando acaba no cambia el valor de c y el bucle infinito no para.

Asi que....¿que debo hacer para que la variable c quede compartida por ambos hilos?

Gracias, un saludo.
45  Programación / Programación C/C++ / Re: Romper ejecucion de un bucle en: 30 Octubre 2012, 09:26 am
Pufff ando atascado....la verdad es que no sa casi nada de hilos....

He probado esto....
Código
  1. #include <stdio.h>
  2. #include <pthread.h>
  3. #include <string.h>
  4.  
  5. void * pararBucle();
  6.  
  7. char * c="a";
  8.  
  9. int main(){
  10.  
  11.        pthread_t hilo;
  12.        pthread_create(&hilo,NULL, pararBucle,NULL);
  13.  
  14.        printf("Iniciando bucle infinito\n");
  15.        while(strcmp(c,"q")){
  16.  
  17.        }
  18.  
  19.        return 0;
  20. }
  21.  
  22. void * pararBucle(){
  23.  
  24.        char * aux="a";
  25.        while(strcmp(aux,"q"))
  26.                fgets(aux,1,stdin);
  27.  
  28.        printf("Presionaste q\n");
  29.        c="q";
  30.        return (void *)"q";
  31. }

Pero me da fallo de segmentacion....

¿Alguna sugerencia?
46  Programación / Programación C/C++ / Romper ejecucion de un bucle en: 30 Octubre 2012, 07:57 am
¡Buenas a todos!

Estoy haciendo un programa que tiene un bucle el cual quiero parar cuando el usuario presione la tecla 'q'. El problema esta en que con funciones como getch() y demas, el bucle para su ejecucion y espera a que el usuario presione una tecla y esto es lo que no quiero. La idea es que el bucle funcione en todo momento y que cuando el usuario presione 'q' se finalice el bucle.

He probado varias ideas que no me han salido bien....como por ejemplo usar hilos de tal forma que un hilo tiene el bucle y el otro hilo el getch()....tambien he probado ha hacer lo mismo pero con procesos y tampoco me ha salido bien....

Asi que como estoy un poco atascado, cansado y deseperado....creo que lo que me queda es hacer polling al teclado....el problema es que sé que esta tecnica va a funcionar seguro pero no se implementarlo....Imagino que sera con alguna funcion que lea el stdin o algo asi...

¿Alguien sabe como hacer polling al teclado para leer la pulsacion de una tecla?

NOTA: estoy programando en C para linux

Gracias, un saludo.
47  Programación / Programación C/C++ / Re: Sobre los Cast en: 26 Octubre 2012, 06:20 am
¡Buenas BlackZeroX (Astaroth)!

Bueno, por lo que veo los errores de compilacion que tienes son por pasar una variable a una funcion del tipo incorrecto. Evidentemente eso se soluciona con un cast. Los cast son necesarios en casi cualquier programa ya que a menudo se necesita cambiar el tipo de una variable para operar con ella. Asi que no hay problema por usar un cast. Lo unico ha tener en cuenta es que si necesitas que tu programa sea muy rapido, los cast llevan tiempo y no deberias hacer cast muy amenudo, esto restaria eficiencia a tu programa.

Un ejemplo tipico del uso del cast es cuando lees un numero del teclado y lo guardas en un char* para evitar que el programa explote si el usuario mete un caracter. Este mecanismo de proteccion te obliga a hacer un atoi(var); (que es un cast de char* a int) para poder operar aritmeticamente con la variable leida. Asi que yo no veo ningun problema con los cast salvo el uso abusivo que reduce la eficiencia del programa.

En cuanto a los typedef...efectivamente solo sirven para abreviar y que el codigo sea mas legible, no le veo mas utilidad.

Sobre compilar con -std=c99....esto hace que no compiles con /usr/bin/gcc lo que hace es que compilas con /usr/bin/c99 que es otro compilador de C, pero no se que ventajas o inconvenientes tiene sobre gcc.

Y con gcc -w, creo que esta opcion desabilita los warnings....porque he probado a compilar un programa con un warning y con gcc -Wall si veo el warning y con gcc -w no. Asi que gcc -w no te losuciona los problemas solo te los aculta.

Espero haberte ayudado, un saludo.
48  Programación / Programación C/C++ / Re: Bucle infinito y hilos en C en: 24 Octubre 2012, 22:12 pm
Uups ya me di cuenta del fallo...tenia un corchete de mas...pero ahora tengo otros....resulta que no estoy incluyendo la libreria pthread.h y no se porque.....

code:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <pthread.h>
  5.  
  6. void *salir( void *ptr );
  7.  
  8. int main()
  9. {
  10.     pthread_t thread1;
  11.     char *salida = "";
  12.  
  13.     pthread_create( &thread1, NULL, salir, (void*) salida);
  14.     pthread_join( thread1, NULL);
  15.  
  16.     printf("bucle infinito\nPresione q para salir\n");
  17.        while(strcmp(salida,"q")){
  18.  
  19.        }
  20.     return 0;
  21. }
  22.  
  23. void *salir( void *ptr )
  24. {
  25.     char out='0';
  26.        while(out!='q')
  27.                out=(char)fgetc(stdin);
  28.     ptr=(void *)"q";
  29.     printf("presionaste q\n");
  30.     return ptr;
  31. }
  32.  
Compilador:
Citar
/tmp/cceoP4ms.o: In function `main':
funcion.c:(.text+0x33): undefined reference to `pthread_create'
funcion.c:(.text+0x47): undefined reference to `pthread_join'
collect2: ld returned 1 exit status

¿Que falla?

Un saludo.
49  Programación / Programación C/C++ / Bucle infinito y hilos en C en: 24 Octubre 2012, 21:56 pm
¡Buenas a todos!

Estoy haciendo un programa en C para linux y tengo problemas con los hilos...

Mi programa tiene un bucle que se cierra cuando el usuario presione "q". Pero claro si uso una funcion como getchar() dentro del bucle el bucle se parará y no quiero que pare el bucle. Asi que he pensado lanzar un hilo y que sea el hilo el que se quede parado para leer del teclado y que cuando el getchar() del hilo lea una 'q' modifique una varible que cierre el bucle.

Aqui os pongo el codigo que tengo....pero meda un par de errores de compilacion...

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <pthread.h>
  5.  
  6. void *salir( void *ptr );
  7.  
  8. int main()
  9. {
  10.     pthread_t thread1;
  11.     char *salida = "";
  12.  
  13.     pthread_create( &thread1, NULL, salir, (void*) salida);
  14.     pthread_join( thread1, NULL);
  15.  
  16.     printf("bucle infinito\nPresione q para salir\n");
  17.        while(strcmp(salida,"q")){
  18.  
  19.        }
  20.     return 0;
  21. }
  22.  
  23. void *salir( void *ptr )
  24. {
  25.     char out='0';
  26.        while(out!='q'){
  27.                out=(char)fgetc(stdin);
  28.     ptr=(void *)"q";
  29.     printf("presionaste q\n");
  30. }

Y los errores de compilacion son estos:
Citar
funcion.c: In function ‘salir’:
funcion.c:30:1: error: expected declaration or statement at end of input
funcion.c:30:1: warning: control reaches end of non-void function [-Wreturn-type]

¿Alguien sabe como solucionarlos?

Un saludo.
50  Seguridad Informática / Hacking / wireshark "bytes in flight" en: 24 Octubre 2012, 20:02 pm
¡Buenas a todos!

Estoy haciendo un programa que v envia paquetes HTTP, pero tengo un problema.
Wireshark no me detecta mis paquetes como paquetes HTTP. Me los detecta como un TCP segment of a reassemble PDU. Ademas detecta el campo de datos del packete TCP como bytes in flight.

¿Que estoy poniendo mal en mis packetes para que wireshark no los detecte como packetes HTTP?

Un saludo.
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 22
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines