qwurx [shmem] ~ > perl - 172.24.43.226/27 $m=pack B32,pop=~'/'x$';printf"$` net %vd bc %vd mask %vd\n",($z=eval$ +`)&$m,$z|~$m,$m __END__ 172.24.43.226 net 172.24.43.224 bc 172.24.43.255 mask 255.255.255.224
"valid prefix" is indeed the network address - 172.24.43.224.
<update>
Skimming Net::IP I didn't find a function which returns network and broadcast addresses given an arbitrary IP address in CIDR notation. I'd do the following for IP v4 addresses
sub get_boundaries { my ($ip, $bits) = split /\//, $_[0]; my $b_ip = pack "C4", split /\./, $ip; my $b_mask = pack "B32", 1 x $bits; my $b_net = $b_ip & $b_mask; my $b_bcast = $b_ip | ~ $b_mask; unpack("N", $b_net), unpack("N", $b_bcast); }
which returns the network and broadcast addresses as 32 bit integers, being the lower and upper limit of a range to test other IP addresses against (after having converted them to integers, of course).
sub in_range { my ($cidr, $ip) = @_; my ($low, $high) = get_boundaries($cidr); my $i_ip = unpack "N", pack "C4", split /\./, $ip; $i_ip > $low && $i_ip < $high; } print "yup\n" if in_range("172.24.43.226/27", "172.24.43.236");
</update>
--shmem
_($_=" "x(1<<5)."?\n".q·/)Oo. G°\ /
/\_¯/(q /
---------------------------- \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}
In reply to Re: Net::IP Invalid Prefix?
by shmem
in thread Net::IP Invalid Prefix?
by true_atlantis
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |