Bonjour à tous,
Actuellement, je travaille sur un projet qui consiste d'envoyer et de recevoir des données en construisant l'en-tête soi-même. Pour effectuer ceci, j'ai effectué des sockets RAW en udp.
Donc mon programme de sockets, j'ai défini de cette manière:
**********Fonction Calcul Checksum**************
**********Programme Principal**********
Déclaration de mes variables + celui du buffer
Ci-dessous, je place au niveau de mon buffer ou se trouve chaque champ c'est-à-dire IP|UDP|Data
struct ip *ip = (struct ip *) buffer;
struct udphdr *udp = (struct udphdr *) (buffer + sizeof(struct ip));
data=(char *)(buffer+sizeof(struct ip)+sizeof(struct udphdr));
strcpy(data, "abd");
Création de la socket
s = socket(PF_INET, SOCK_RAW, IPPROTO_RAW);
Ensuite je mets les memset pour la source et la destination
Attachement de la socket par le bind
Assignation des valeurs pour ip et udp
Envoi de la trame par un sendto
******************Fin du programme****************
Lorsque je fais mon programme de cette manière cela fonctionne à merveille, j'envoi bien le mot abd et il est bien reçu sur mon serveur. J'ai même pu d'ailleurs vérifier avec tcpdump voire même wireshark si la donnée allait bien du client au serveur ce qui est le cas.
Mon problème actuel c'est que je souhaite envoyer plusieurs valeurs qui sont retournées par des fonctions spécifiques qui me retournent un entier et que je veux intégrer à ma donnée.
Pour faire ceci, j'ai créer une structure ou se trouve 3 variables:
struct data{
int a;
int b;
int c;
};
Ensuite à la place de la partie data=(char *)(buffer+sizeof(struct ip)+sizeof(struct udphdr)) et strcpy(data,"abd"), je les ai remplacé par:
struct data * data;
data=(struct data *)(buffer+sizeof(struct ip)+sizeof(struct udphdr));
data->a=0x12;
data->b=0x23;
data->c=0x34;
La valeur de ses variables sont 0x12 car si je mettais juste 12 alors dans l'en-tête, on ne voit pas cette valeur d'ou la raison de l'héxa ici.
Lorsque j'envoi, mon serveur ne reçoit rien alors qu'il recevait à merveille auparavant.
Auriez vous une suggestion sur l'erreur que j'ai commise ?
Merci de me répondre.
A bientôt.