Generation d'une plage ip

Generation d'une plage ip - Programmation

Marsh Posté le 31-08-2002 à 14:35:07    

salut
 
j'ai besoin d'aide pour generer une plage ip quand je specifie une ip de depart et une d'arrive.
 
pour l'instant j 'en suis la
 
par exemple je donne : 192.168.5.50 192.168.15.80
 
ensuite j'ai :
 
$start1 = 192
$start2 = 168
$start3 = 5
$start4 = 50
 
$stop1 = 192
$stop2 = 168
$stop3 = 15
$stop4 = 80
 
et je fais ca:
 
for (my $i = $start1 ; $i <= $stop1 ; $i++) {
        for (my $j = $start2 ; $j <= $stop2 ; $j++) {
                for (my $k = $start3 ; $k <= $stop3 ; $k++) {
                        for (my $l = $start4 ; $l <= $stop4 ; $l++) {
                                print ("$i.$j.$k.$l\n" );
                                }
                        }
                }
        }
 
le truc la c'est que ca me genere pas vraiment comme il faut vu que la derniere partie de l'ip va toujours rester 50 et 80
de plus si le start4 est superieur au stop4 (ce qui peut tres bien arrive) ben la ca foire completement... :/
 
la je le code en perl, mais de toute facon c'est plutot au niveau de l'algorithme que j'ai besoin d'aide.
apres au niveau du language, je pense que c'est a peu pres pareil dans tous les languages.
 
merci d'avance pour votre aide.

Reply

Marsh Posté le 31-08-2002 à 14:35:07   

Reply

Marsh Posté le 31-08-2002 à 15:34:10    

une IP, c sur 32 Bit,
 
donc tu converti ton IP en nombre, tu l incrementes, et tu reconvertis en IP,  
 
en C, y a une fonction qui converti, masi je sais pu c laquelle (ca doit etre marqué dnas socket.h... en fait je crois meme que c est une macro ! donc tu pourrais la traduire!)


Message édité par slvn le 31-08-2002 à 15:35:00
Reply

Marsh Posté le 31-08-2002 à 15:52:59    

slvn a écrit a écrit :

une IP, c sur 32 Bit,
 
donc tu converti ton IP en nombre, tu l incrementes, et tu reconvertis en IP,  
 
en C, y a une fonction qui converti, masi je sais pu c laquelle (ca doit etre marqué dnas socket.h... en fait je crois meme que c est une macro ! donc tu pourrais la traduire!)




 
oue c'est vrai avais pas pense a ca :p
thx
en plus j'avais deja code un convertisseur d'ip
lol
 
c le truc ou tu multiplie la premiere partie par 16777216, la seconde par 65....

Reply

Marsh Posté le 31-08-2002 à 18:16:53    

exactement,  
 
et pour repasser en ip, tu divise par 255^3, et tu garde le quotient, puis tu divises le reste par 255^2 et ainsi de suite  
:)

Reply

Marsh Posté le 31-08-2002 à 18:42:21    

slvn a écrit a écrit :

exactement,  
 
et pour repasser en ip, tu divise par 255^3, et tu garde le quotient, puis tu divises le reste par 255^2 et ainsi de suite  
:)



spa plutot 256 :heink:

Reply

Marsh Posté le 31-08-2002 à 18:57:20    

si c vrai :)

Reply

Marsh Posté le 31-08-2002 à 22:13:48    

ouep j'ai fais un truc kom ca :
 
 my ($ipc) = @_;
        my $a = int ($ipc / 16777216);
        $ipc = ($ipc - $a * 16777216);
        my $b = int ($ipc / 65536);
        $ipc = ($ipc - $b * 65536);
        my $c = int ($ipc / 256);
        $ipc = ($ipc - $c * 256);
        my $d = int ($ipc);
        return ($a,$b,$c,$d);
 
on peut peut etre ameliorer un peu :)

Reply

Marsh Posté le 31-08-2002 à 22:18:50    

si  c etait en C, tu pourrais utiliser   ">>" pour faire un decalage de 8 bit (<=> / 256 ) .....ca serait plus rapide, mais pour si peu....
 

Reply

Sujets relatifs:

Leave a Replay

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