I've always done ((A*256+B)*256+C)*256+D
Slightly more efficient
[Bullock, Howard A.]
Consider...
Where a subnet is 10.1.1.0/24
sub ConvertValToIp {
return join(".", unpack("C4", pack("N", $_[0])));
}
sub ConvertIpToVal {
return unpack("N", pack("C4", split(/\./, $_[0])));
}
sub ConvertIpToVal2 {
my @ip = split /\./, $_[0];
return ($ip[0]<<24)|($ip[1]<<16)|($ip[2]<<8)|$ip[3];
}
sub ConvertFromTwosComp {
my $val = shift;
$val = -1 * $val;
$val--;
$val = $val ^ (hex("ffffffff") x 4);
return $val;
}
sub ConvertToTwosComp {
my $val = shift;
$val = $val ^ (hex("ffffffff") x 4);
$val = -1 * $val;
$val--;
return $val;
}
my $IP_Start = ConvertIpToVal($Subnet);
my $IP_End = $IP_Start+(2**(32-$Bits))-1;
my $IPval = ConvertIpToVal($IP);
if ($IPval > $IP_Start and $IPval <= $IP_End){ print "in subnet\n";}
_______________________________________________
ActivePerl mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
_______________________________________________
ActivePerl mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs