コード例 #1
0
ファイル: IP.php プロジェクト: BackupTheBerlios/oos-svn
	/**
	 * Get low and high IP addresses for a specified range.
	 *
	 * @param array $ipRange An IP address range in presentation format
	 * @return array|false Array ($lowIp, $highIp) in network address format, or false if failure
	 */
	static public function getIpsForRange($ipRange)
	{
		// in case mbstring overloads strlen function
		$strlen = function_exists('mb_orig_strlen') ? 'mb_orig_strlen' : 'strlen';

		if(strpos($ipRange, '/') === false)
		{
			$ipRange = self::sanitizeIpRange($ipRange);
		}
		$pos = strpos($ipRange, '/');

		$bits = substr($ipRange, $pos + 1);
		$range = substr($ipRange, 0, $pos);
		$high = $low = @_inet_pton($range);
		if($low === false)
		{
			return false;
		}

		$lowLen = $strlen($low);
		$i = $lowLen - 1;
		$bits = $lowLen * 8 - $bits;

		for($n = (int)($bits / 8); $n > 0; $n--, $i--)
		{
			$low[$i] = chr(0);
			$high[$i] = chr(255);
		}

		$n = $bits % 8;
		if($n)
		{
			$low[$i] = chr(ord($low[$i]) & ~((1 << $n) - 1));
			$high[$i] = chr(ord($high[$i]) | ((1 << $n) - 1));
		}

		return array($low, $high);
	}
コード例 #2
0
ファイル: IP.php プロジェクト: neolf/PIWIK4MOBILE
 /**
  * Get low and high IP addresses for a specified range.
  *
  * @param array $ipRange An IP address range in presentation format
  * @return array|false Array ($lowIp, $highIp) in network address format, or false if failure
  */
 public static function getIpsForRange($ipRange)
 {
     if (strpos($ipRange, '/') === false) {
         $ipRange = self::sanitizeIpRange($ipRange);
     }
     $pos = strpos($ipRange, '/');
     $bits = substr($ipRange, $pos + 1);
     $range = substr($ipRange, 0, $pos);
     $high = $low = @_inet_pton($range);
     if ($low === false) {
         return false;
     }
     $lowLen = Piwik_Common::strlen($low);
     $i = $lowLen - 1;
     $bits = $lowLen * 8 - $bits;
     for ($n = (int) ($bits / 8); $n > 0; $n--, $i--) {
         $low[$i] = chr(0);
         $high[$i] = chr(255);
     }
     $n = $bits % 8;
     if ($n) {
         $low[$i] = chr(ord($low[$i]) & ~((1 << $n) - 1));
         $high[$i] = chr(ord($high[$i]) | (1 << $n) - 1);
     }
     return array($low, $high);
 }