Пример #1
0
 /**
  * Convert a network specification in CIDR notation to an integer network and a number of bits
  */
 public static function parseCIDR($range)
 {
     $parts = explode('/', $range, 2);
     if (count($parts) != 2) {
         return array(false, false);
     }
     $network = IP::toSigned($parts[0]);
     if ($network !== false && is_numeric($parts[1]) && $parts[1] >= 0 && $parts[1] <= 32) {
         $bits = $parts[1];
         if ($bits == 0) {
             $network = 0;
         } else {
             $network &= ~((1 << 32 - $bits) - 1);
         }
         # Convert to unsigned
         if ($network < 0) {
             $network += pow(2, 32);
         }
     } else {
         $network = false;
         $bits = false;
     }
     return array($network, $bits);
 }