|
|
|
|
Bonjour,
je souhaite calculer, dans un script perl, une adresse reseau a partir de mon adresse ip et de mon masque.
Par exemple, si j'ai comme ip 192.168.10.45 et comme masque 255.255.255.0 j'aimerais recuperer dans une variable mon adresse reseau 192.168.10.0 .
Comme faire ?
Merci pour votre aide
Configuration: Solaris Firefox 2.0.0.14
Salut,
my $ip=.....; my $m=....; my ($x1,$x2,$x3,$x4)=split /\./,$ip; my ($m1,$m2,$m3,$m4) = split /\./,$m; my $reseau=$x1 & $m1 . "." . $x2 & $m2 . "." . $x3 & $m3 . "." . $x4 & $m4;autre version my $ip=.....; my $m=....; my @ip=split /\./,$ip; my @masque = split /\./,$m; push @reseau,$ip[$_] & $mask[$_] for 1..4; my $reseau=join ".",@reseau; 106485010510997108 |
Re,
lami20j@debian:~/trash/ccm_perl$ perl -e 'print "192" & "255","\n"' 010 lami20j@debian:~/trash/ccm_perl$ perl -e 'print 192 & 255,"\n"' 192Pourquoi? Puisque le point est l'opérateur de concaténation. Ce qui fait que 192.168.1.47 deviens une chaine de caractère et l'opérateur & donnera un résultat inattendu.Il suffit de forcer la conversion (j'ai utilise une addition avec zéro). Vu le contexte 0+192 sera le nombre 192 et pas la chaîne "192". Bref 0+192 ou 0+"192" donnera toujours un nombre tandis que 0.192 ou 0 . "192" c'est une chaine Voir en gras. #!/usr/bin/perl use strict;use warnings; my @reseau; my $ip="192.168.1.47"; my $m="255.255.255.0"; my @ip=split /\./,$ip; my @masque = split /\./,$m; push @reseau,0+$ip[$_] & $masque[$_] for 0 .. 3; my $reseau=join ".",@reseau; print "réseau $reseau\n"; __END__ lami20j@debian:~/trash/ccm_perl$ perl ccm_address_reseau.pl réseau 192.168.1.0 106485010510997108 |