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.
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!¡.
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.
Se saca el checksum mas adelante de dos estructuras CONSECUTIVAS csum().
Dulces Lunas!¡.