Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: bitBuffer en 15 Enero 2013, 04:59 AM

Título: Socket Raw
Publicado por: bitBuffer en 15 Enero 2013, 04:59 AM
Buenas, estoy tratando de crear Socket Raw, buscando codigo por Internet encontre varios pero no logro entender porque hacen lo siguiente:

char packetBuf[DIMENSION];
struct ip *IPheader = (struct ip *) packetBuf;

Porque se declara un vector char (tambien podria ser un puntero y despues darle dimension con malloc) y se hace esa conversion. PacketBuf apuntaria a posiciones que almacenarian char pero con esa conversion que apuntaria a posiciones (la cantidad es DIMENSION) que almacenarian tipo struct ip.
Título: Re: Socket Raw
Publicado por: BlackZeroX en 15 Enero 2013, 05:43 AM
No importa como desees hacerlo, solo debes TENER el espacio necesario para manipular la estructura equivalente.
en lugar de:


char packetBuf[DIMENSION];
struct ip *IPheader = (struct ip *) packetBuf;


En mi opinión seria mejor:


struct ip IPheader = {}; // C99
'El apuntador IPHeader pasa a ser:
... &IPHeader ...


Esta es solo una opinión no se que demonios se hace con packetBuf, si pones el código involucrado creo que seria mejor,

Dulces Lunas!¡.
Título: Re: Socket Raw
Publicado por: bitBuffer en 15 Enero 2013, 06:10 AM
Es el codigo que se encuentra aca http://foro.elhacker.net/programacion_cc/enviar_paquetes_tcpip-t357637.0.html  .

struct ip *IPheader = (struct ip *) malloc(DIMENSION*sizeof(struct ip));

No seria lo mismo?.
Eso es lo que no me queda claro porque declara char si despues hace un cast a la estructura.
Título: Re: Socket Raw
Publicado por: BlackZeroX en 15 Enero 2013, 06:20 AM
Se saca el checksum mas adelante de dos estructuras CONSECUTIVAS csum().

Dulces Lunas!¡.