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 - soyloqbuskas

#51
Programación C/C++ / Dont fragment iphdr C
12 Octubre 2012, 11:59 AM
¡Buenas a todos!

Necesito editar el flag de dont fragment de la cabecera IP pero no se como hacerlo pues en el struct iphdr no hay campo para editar los flags...

¿alguien sabe como editar los flags de la cabecera ip?

Nota: estoy programando Raw Sockets en C para linux

Gracias, un saludo.
#52
Programación C/C++ / Re: ayuda con sockets
12 Octubre 2012, 11:55 AM
¡Buenas ankora45!

El problema lo tienes en esta linea:
sock.sin_addr.s_addr = inet_addr(host->h_addr);

Mira este enlace que hablan sobre tu problema
http://foro.elhacker.net/programacion_cc/asignar_ip_a_una_sockaddrin-t217251.0.html

Un saludo.
#53
Programación C/C++ / Re: Problema con sprintf()
12 Octubre 2012, 02:47 AM
Muchas gracias por las aclaraciones, enseguida me pondre a corregir.

Un saludo.
#54
Programación C/C++ / Problema con sprintf()
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:
char * httpPacket(char *httpDatos){

        char packet[65536]={""};
        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);
        printf("paquete: %s\n",packet);
        return (char *) packet;

}


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?
#55
¡Buenas a todos!

Sabeis como puedo hacer una linea como esta en C?

system("programa -a param1 -b %s -c param3", intVar);

Gracias, un saludo.
#56
¡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.
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.
#57
Redes / longitud cabecera ethernet
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?
#58
!!!Muchas gracias a todos por las respuestas!!!

Un saludo.
#59
¡Buenas a todos!

Tengo un problemilla con el open y el read. Este es mi codigo.

char * leeFichero(char * path){
        char * datos="";
        int f=0;
        int fileSize=100;
       
        f=open(path, O_RDONLY);
        if(!f) return 0;
        read(f,datos,fileSize);
        printf("datos: %s\n",datos);

        return datos;
}


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.
#60
Programación C/C++ / Re: funcion getPayloadTcp() en C
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:
CitarL���puܸ"

Y esto no deberia ser asi porque la funcion rcevfrom(); me retorna 208 bytes.
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...