Linux Reseaux : variables "s ecrasant" en bossant sur les Headers IP
cs_cast
Messages postés3Date d'inscriptionlundi 24 mars 2003StatutMembreDernière intervention 6 avril 2006
-
8 mai 2005 à 18:23
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 2012
-
8 mai 2005 à 18:54
Salut tout le monde.
Je travaille sur un projet genre sniffer avec libpcap.
Quand je veut afficher les addresses IP sniffer y as pas de probleme,
mais quand je les enregistre et que je les reaffiche par la suite ca
chie, l IP source as ecraser l IP destination, et je me retrouve avec 2
fois l IP source.
j ai jamais rencontrer ce genre de probleme mais la ca fait longtemps
que je suis bloquer et j ais toujours pas de solution donc j en appelle
a l aide
ici le code
void print_ip_header(struct ip_header *paquetip)
...
printf ("\n\n IP source adress----->"); //32 bit
printf(inet_ntoa (paquetip->ip_src)); // OK
IPsrc= inet_ntoa (paquetip->ip_src);
printf ("\n IP destination adress----->");
printf(inet_ntoa(paquetip->ip_dest)); // OK
IPdst = inet_ntoa (paquetip->ip_dest);
printf ("\n\n");
printf ("\n Re IP destination"); // IP source ?!?!??!?!??!?!? PB
printf(IPdst);
printf ("\n Re IP source"); //IP source normale la
printf(IPsrc);
....
}
la fonction qui gere ca et une fonction void, je precise parceque j ai
des problemes avec les fonctions surtout avec la recuperation de
donnee,
cs_cast
Messages postés3Date d'inscriptionlundi 24 mars 2003StatutMembreDernière intervention 6 avril 2006 8 mai 2005 à 18:38
j ai remarquer aussi qui si j intervertit le code relatif aux adresses
IP, j inverse le probleme. Ce n est plus l ip destination qui est
ecraser mais l IP source.
Donc il doit y avoir un probleme qui fait que l ecriture de mes variables n est pas protegee..
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 8 mai 2005 à 18:54
Salut,
Affiche les adresses retournées par inet_ntoa et tu verra que les adresses sont identiques.
inet_ntoa retourne un buffer déclaré en static dans la fonction. Il ne faut donc pas sauver l'adresse retournée par inet_ntoa mais le contenu du buffer.