Socket Raw

Iniciado por bitBuffer, 15 Enero 2013, 04:59 AM

0 Miembros y 1 Visitante están viendo este tema.

bitBuffer

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.

BlackZeroX

#1
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!¡.
The Dark Shadow is my passion.

bitBuffer

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.

BlackZeroX

Se saca el checksum mas adelante de dos estructuras CONSECUTIVAS csum().

Dulces Lunas!¡.
The Dark Shadow is my passion.