Bonjour à tous,
Je recherche à modifier un programme existant qui transfère des donnés via le réseau
Mon but est de modifier un champ des datas qui transitent par ce logiciel en ajoutant l'adresse IP source du client
client -> logiciel -> serveur
Je récupère bien l'adresse source du client, ça c'est parfait
printf("IP address: is %s %x %x \n", adrIPp, s->sin_addr.s_addr, inet_addr("adrIPp"));
Les datas quand à elle sont stockées dans un unsigned char
unsigned char fpdu[ctx->pdulen];
Le datas qui me concernent sont précisément à l'emplacement mémoire 15
J'ai maintenant récupéré pas mal d'infos et je pense avoir les pièces de mon puzzle, reste maintenant à assembler tout ça ....
Ce que j'ai réussi à faire:
Grâce à memcpy j'arrive à injecter à la volé (sans perturber le fonctionnement, ni segfault) des donnés dans le bon champs
Pour le moment je fais un tableau de char dans lequel je copie l'IP en hexa que j'injecte ensuite via memcopy.
1 2 3
| int sizearray = sizeof s->sin_addr.s_addr;
sprintf(buffer, "%x", s->sin_addr.s_addr);
memcpy(fpdu+15, src, sizearray); |
Bon c'est une première approche qui me permet de bien cibler le problème, cependant j'aimerais envoyer une IP et pas juste une suite de caractère (basé sur l'IP), du côté serveur j'ai le champ ip_client qui est bien remplit par une suite de chiffres fixent mais qui est bien différente pour chaque client.
Je vois une solution, convertir l'IP en unsigned char et injecter les données avec un strcpy, mais je n'arrive pas à obtenir quelque chose qui tourne je pense sincèrement ne pas bien saisir ce que je fais (honte à moi je le reconnais, mais je ne suis pas dev
)
Si vous avez une idée je suis plus que preneur
Merci d'avance
Partager