[C/C++ sous Unix] Manipuler les IPs

Manipuler les IPs [C/C++ sous Unix] - Programmation

Marsh Posté le 17-08-2002 à 23:20:59    

Bonjour,
 
Imaginons le cas où j'ai un réseau de 400 ordinateurs par exemple, le premier ayant l'IP 192.168.0.0, le dernier 192.168.1.145 (je vous rassure je n'ai que 2 ordis en réseau ;)
 
Chaque ordinateur a une IP entre ces 2 citées ci-dessus.
Chaque ordinateur a aussi un serveur de lancé sur le port 9000 par exemple.
 
Admettons que je sois sur le premier ordinateur, le routeur par exemple (192.168.0.O), et que je veuille lancer un client qui se connecte au 2 eme, envoie des ordres, puis se deconnecte, et se reconnecte au 3eme, et ainsi de suite jusqu'au 400 eme.
 
J'aimerai donc en indiquant la 2eme IP (192.168.0.1) et la dernière (192.168.1.145) (de type char * dynamique) pouvoir avoir chacune des IPs situées entre (dans une liste de char *, ou bien les unes après les autres, n'importe).
 
J'ai bien une solution, qui consiste en la concaténation des 4 parties de l'IP en hexa, puis à l'extraction avec un modulo 256, mais j'aimerai savoir si il existe pas une fonction du C (et s'il vous plaît une fonction standard, pas de conio.h et autres windowseries) qui permette la manipulation des IPs, ou bien une astuce avec les structures hostent ou sockaddr_in qui permette d'incrémenter le champ qui contient l'IP par exemple.
 
 
Merci beaucoup !!!


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 17-08-2002 à 23:20:59   

Reply

Marsh Posté le 17-08-2002 à 23:55:03    

no idea ???
 
 :)


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 17-08-2002 à 23:59:15    

inet_addr (et sa réciproque inet_ntoa)
il me semble que ça existe sous Linux aussi donc ça doit être standard...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 18-08-2002 à 02:38:10    

Tu convertis chaque IP en 1 entier (4 valeurs comprises entre 0 et 255, c'est pile poil un entier 32 bits), et tu fais une simple boucle entre les 2 valeurs.

Reply

Marsh Posté le 18-08-2002 à 03:09:02    

mrbebert a écrit a écrit :

Tu convertis chaque IP en 1 entier (4 valeurs comprises entre 0 et 255, c'est pile poil un entier 32 bits), et tu fais une simple boucle entre les 2 valeurs.




 
salut,
 
c'est en effet ce que je voulais faire, mais je voulais être sûr qu'une fonction ou une structure ne permettait pas d'abord de faire ce que je demande.
Je vais donc voir avec inet_addr et inet_ntoa (qui existent bien sous Linux)
 
Merci à vous  :hello:


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 18-08-2002 à 07:36:55    

Citation :

Tu convertis chaque IP en 1 entier (4 valeurs comprises entre 0 et 255, c'est pile poil un entier 32 bits), et tu fais une simple boucle entre les 2 valeurs.


 
Oui, pour ipv4 ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 18-08-2002 à 11:47:52    

HelloWorld a écrit a écrit :

Citation :

Tu convertis chaque IP en 1 entier (4 valeurs comprises entre 0 et 255, c'est pile poil un entier 32 bits), et tu fais une simple boucle entre les 2 valeurs.


 
Oui, pour ipv4 ...




 
oui bien sur,
 
en tout cas inet_addr et inet_ntoa marchent au poil, le pire c'est que je connaissais déjà ces fonctions, que je suis con :hap:


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 18-08-2002 à 14:36:05    

juju_le_barbare a écrit a écrit :

 
 
oui bien sur,
 
en tout cas inet_addr et inet_ntoa marchent au poil, le pire c'est que je connaissais déjà ces fonctions, que je suis con :hap:  



Attention au format du résultat. Dans les fonctions liées au réseau, il y a toujours un problème de little endian/big endian.
Si le dernier chiffre de l'IP correspond bien à l'octet de poids faible, ca ira pour faire la boucle.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed