Bonjour,

J'ai la structure suivante qui fait 20 octets au total :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
struct ipv4 {
   unsigned int   version:4;
   unsigned int   tailleh:4;
   uint8_t        tos;
   uint16_t       taillet;
   uint16_t       ident;
   uint16_t       offset;
   uint8_t        ttl;
   uint8_t        proto;
   uint16_t      checksum;
   u_char * 	    a_src;
   u_char *      a_dst;
};
que j'initialise avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
	struct ipv4 header1;
		header1.version = 0x4;
		header1.tailleh = 0x5;
		header1.tos = 0x00;
		header1.taillet = 0x05be;
		header1.ident = 0x8fc4;
		header1.offset = 0x0000;
		header1.ttl = 0x39;
		header1.proto = 0x06;
		header1.checksum = 0x0000;
		u_char * as = malloc(4*sizeof(u_char)); 
		as[0] = 0xd1;
		as[1] = 0x55;
		as[2] = 0xe5;
		as[3] = 0x68;
		u_char * ad = malloc(4*sizeof(u_char));
		ad[0] = 0xc0;
		ad[1] = 0xa8;
		ad[2] = 0x00;
		ad[3] = 0x0a;
 
		header1.a_src = as;
		header1.a_dst = ad;



Je voudrais mettre cette structure dans un tableau de 16 bits (unsigned short ?) à partir d'une fonction qui récupère un pointeur vers cette structure pour pouvoir faire la fonction de checksum de l'entête ip

Je n'y arrive pas surtout à cause des deux derniers champs de 4 octets chacun qui sont traités comme des pointeurs (error: aggregate value used where an integer was expected).

Quelqu'un pourrait il m'aider ?

Merci d'avance !