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

Reply via email to