sub range_from_net { my ($subnet,$mask)=@_; my $subbits=addr2bits($subnet); my $maskbits=addr2bits($mask); my $allones = ~ $maskbits; my $top = $allones - 1; my $bottom = ($subbits + 1) & $allones; return ($bottom,$top); } sub addr2bits { my $ip=shift; my @o=split([\.],$ip); return ( ($o[0] << 24 ) + ($o[1] << 16) + ($o[2]<<8) + $o[3]); } sub bits2addr { my $bits=shift; return sprintf("%d.%d.%d.%d", (($bits & 0xff000000 ) >> 24), (($bits & 0x00ff0000 ) >> 16), (($bits & 0x0000ff00 ) >> 8), ($bits & 0x000000ff ) ); }