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

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
61  Programación / Programación C/C++ / Problema con sprintf() en: 11 Octubre 2012, 15:24 pm
¡Buenas a todos!

Tengo un problemilla con sprintf(). El problema esta en que me duplica la cadena y no coge bien las variables....

Esta es la funcion:
Código
  1. char * httpPacket(char *httpDatos){
  2.  
  3.        char packet[65536]={""};
  4.        sprintf(packet,"HTTP/1.1 200 OK\r\nDate: Thu, 22 Mar 2012 02:02:42 GMT\r\nContent-Type: text/html; charset-UTF-8\r\nContent-Encoding: gzip\r\nContent-Lengh: %d\r\nServer: gws\r\n\r\n%s",sizeof(httpDatos), httpDatos);
  5.        printf("paquete: %s\n",packet);
  6.        return (char *) packet;
  7.  
  8. }

La variable httpDatos contiene codigo html...

Y el printf(packet) tiene como salida esto:

Citar
paquete: HTTP/1.1 200 OK
Date: Thu, 22 Mar 2012 02:02:42 GMT
Content-Type: text/html; charset-UTF-8
Content-Encoding: gzip
Content-Lengh: 4
Server: gws

HTTP/1.1 200 OK
Date: Thu, 22 Mar 2012 02:02:42 GMT
Content-Type: text/html; charset-UTF-8
Content-Encoding: gzip
Content-Lengh: 4
Server: gws



Cuando en realidad deberia ser asi:

Citar
paquete: HTTP/1.1 200 OK
Date: Thu, 22 Mar 2012 02:02:42 GMT
Content-Type: text/html; charset-UTF-8
Content-Encoding: gzip
Content-Lengh: 34
Server: gws

<html>
     <h1>Prueba</h1>
</html>

Si os fijais, duplica la cabecera, pone mal el campo Content-Length y no muestra el codigo html...

¿Donde esta el fallo?
62  Programación / Programación C/C++ / system(variable) en C linux en: 5 Octubre 2012, 21:14 pm
¡Buenas a todos!

Sabeis como puedo hacer una linea como esta en C?

Código
  1. system("programa -a param1 -b %s -c param3", intVar);

Gracias, un saludo.
63  Programación / Programación C/C++ / Re: funcion getPayloadTcp() en C en: 4 Octubre 2012, 13:55 pm
¡Buenas!

La funcion getPayload ya la tengo bien hecha solo tengo una duda. Para calcular la suma de todas las cabeceras y que funcione correctamente debo hacer lo siguiente.
Código
  1. int hdrSize=( sizeof (struct ethhdr) + sizeof(struct iphdr) + sizeof(struct tcphdr) + 12 );

¿El 12 magico porque debo sumarselo?

Creo que esos 12 bytes son 8 de la cabecera ethernet y 4 de la cabecera tcp. Cocretamente son:

7 bytes del preambulo de la cabecera ethernet
1 byte del delimitador del inicio de trama de la cabecera ethernet
4 bytes del campo de opciones de la cabera tcp.

Esto creo que se debe a que el struct ethhdr solo tiene los campos srcMAC destMAC y protocolo, y el strcut tcphdr no inculye el campo de opciones....

¿mis sospechas son correctas?

Un saludo.
64  Comunicaciones / Redes / longitud cabecera ethernet en: 4 Octubre 2012, 13:37 pm
¡Buenas a todos!

¿La longitud de la cabecera ethernet es constante o es variable?

Es que estoy haciendo un programa y para separa el payload de las cabeceras de un paquete TCP, debo calcular primero la logitud de todas las cabeceras (tamaño(cabeceraEthernet) + tamaño(cabeceraIp) + tamaño(cabeceraTcp)). Y resulta que para que me funcione perfectamentente a la suma de todas las cabeceres le debo sumar 12....y no se porque...

¿Es posible que por usar wifi se le añadan datos a la cabera ethernet?
65  Programación / Programación C/C++ / Re: problema con read() y open() C en: 1 Octubre 2012, 22:20 pm
!!!Muchas gracias a todos por las respuestas!!!

Un saludo.
66  Programación / Programación C/C++ / problema con read() y open() C en: 1 Octubre 2012, 05:39 am
¡Buenas a todos!

Tengo un problemilla con el open y el read. Este es mi codigo.
Código
  1. char * leeFichero(char * path){
  2.        char * datos="";
  3.        int f=0;
  4.        int fileSize=100;
  5.  
  6.        f=open(path, O_RDONLY);
  7.        if(!f) return 0;
  8.        read(f,datos,fileSize);
  9.        printf("datos: %s\n",datos);
  10.  
  11.        return datos;
  12. }
  13.  

El caso es que el printf(datos) me sale vacio a pesar de que le paso un path correcto de un fichero con datos...

Y otra cosa mas, ¿como puedo calcular el tamaño del fichero? porque he puesto fileSize=100 porque no sabia calcularlo xD

Gracias, un saludo.
67  Programación / Programación C/C++ / Re: funcion getPayloadTcp() en C en: 30 Septiembre 2012, 16:25 pm
Pues....haber supuestamente al hacer el printf(buffer); deberia imprimirme el paquete completo...se que lo va a imprimir mal porque va intentar imprimir en ascii todo el buffer, pero si el tamaño del bufer es de 208 bytes, deberia imprimirme 208 caracteres ascii. Pêro no es asi....cuando hago un printf(buffer) solo me imprime 7 caracteres:
Citar
L���puܸ"

Y esto no deberia ser asi porque la funcion rcevfrom(); me retorna 208 bytes.
Código
  1. data_size = recvfrom(sock_raw , buffer , 65536 , 0 , &saddr , (socklen_t*)&saddr_size);

Por tanto si data_size=208 pero al hacer un printf(buffer); no imprime 208 caracteres...es porque algo falla.....y no doy con ello...
68  Programación / Programación C/C++ / Re: funcion getPayloadTcp() en C en: 29 Septiembre 2012, 22:50 pm
Uuuups! vaya fallo.

otra cosa mas....
la variable buffer es un puntero a un malloc(). ¿Como puedo imprimir el contenido del malloc?

ejemplo:

Código
  1. int data_size=0;
  2. char * buffer=(char *)malloc(65536);
  3. data_size = recvfrom(sock_raw , buffer , 65536 , 0 , &saddr , (socklen_t*)&saddr_size);
  4. printf("data_size: %d\n", data_size);
  5. printf("strlen: %d\n",strlen(buffer));
  6. printf("sizeof: %d\n",sizeof(buffer)); // sizeof strlen y datasize no son iguales....por que?
  7. printf("buffer: \n%s\n", buffer); //aqui me imprime el puntero buffer, pero no el contenido del malloc
  8.  
69  Seguridad Informática / Seguridad / Re: Protegerse de sniffers en red local en: 29 Septiembre 2012, 20:58 pm
¡Buenas chatarrero!

Si estas usando wifi, no puedes protegerte ya que todos los que estan a tu alrededor estan recibiendo las ondas wifi te tu PC y por tanto cualquiera puede poner un sniffer y capturar tus paquetes porque todos estais en un MITM.

Si estas usando ethernet y tienes conexion directa con el router, para que alguien este sniffeando tus paqutes, primero tiene que hacer alguna tecnica de MITM (Main In The Middle). Esto se suele hacer con un arp-poison (aunque hay mas tecnicas). Asi que para detectar un arp-poison puedes abrir un sniffer como wireshark y ver si estas recibiendo muchas tramas arp muy rapido, si es asi, entonces alguien te esta haciendo un arp-poison para poder sniffear tus paquetes.

Tambien creo que con nmap hay un tipo de escaneo que te permite ver si una tarjeta de red esta en modo monitor para sniffear, asi que puedes hacer ese escaneo con la ip que crees que te espia, y si decteta que esta en modo monitor, entonces es posible que te este espiando.

Un saludo.
70  Programación / Programación C/C++ / Re: funcion getPayloadTcp() en C en: 29 Septiembre 2012, 18:32 pm
¡Buenas 0xDani !

He probado con un malloc y diclarandome la variable datos como un array de caracteres, y de ambas formas no me da fallo de segmentacion. El tema esta en que la variable datos se queda vacia, cuando deberia contener datos de la capa de aplicacion.

Código
  1. char* getPayloadTcp(char* buffer){
  2.        int i=0;
  3.        int f=0;
  4.        int longitud=sizeof((char*)buffer); //tamaño total del paquete (tambien he probado con strlen(buffer))
  5.  
  6.        struct iphdr *iph = (struct iphdr *)(buffer  + sizeof(struct ethhdr));
  7.        int iphdrlen = iph->ihl*4;  //tamaño de la cabecera ip
  8.        int ethhdrlen= sizeof(struct ethhdr); //tamaño de la cabecera ethernet
  9.        int tcphdrlen= sizeof(struct tcphdr); //tamaño de la cabecera tcp
  10.        int totalhdrlen=(tcphdrlen + iphdrlen + ethhdrlen); //suma de todas las cabeceras
  11.        char  *datos=(char *) malloc(65565);
  12.        printf("cabecera: %d\npaquete: %d\n",totalhdrlen, longitud);
  13.        for(f=totalhdrlen;f<longitud;f++){
  14.                datos[i]=buffer[f];
  15.                i++;
  16.        }
  17.        datos[i]='\0';
  18.        printf("datos: %s\n", datos);
  19.  
  20.        return datos;
  21. }
  22.  

He hecho unos printf() de la variable totalhdrlen y de longitud y el resultado es 54 y 4 respectivamente....Cuando en realidad longitud deberia ser siempre mayor que totalhdrlen...algo debo estar haciendo mal...
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines