• Модуль: ldap
  • Путь к файлу: ~/bitrix/modules/ldap/classes/general/ldap_util.php
  • Класс: CLdapUtil
  • Вызов: CLdapUtil::IsIpFromNet
static function IsIpFromNet($ip, $netsAndMasks)
{
	if((string)$ip === "")
	{
		return false;
	}

	if((string)$netsAndMasks === "")
	{
		return false;
	}

	$arNetsMasks = explode(";", $netsAndMasks);

	foreach ($arNetsMasks as $netAndMask)
	{
		$netAndMask = trim($netAndMask);

		if(!$netAndMask)
			continue;

		if((!preg_match("#^(d{1,3}.){3,3}(d{1,3})/(d{1,3}.){3,3}(d{1,3})$#",$netAndMask) && !preg_match("#^(d{1,3}.){3,3}(d{1,3})/(d{1,3})$#",$netAndMask)) || !preg_match("#^(d{1,3}.){3,3}(d{1,3})$#",$ip))
			continue;

		$arNetAndMask = explode("/", $netAndMask);

		$net = $arNetAndMask[0];

		if(mb_strpos($arNetAndMask[1], ".") !== false) 										//xxx.xxx.xxx.xxx/xxx.xxx.xxx.xxx
			$mask = $arNetAndMask[1];
		else 																			//xxx.xxx.xxx.xxx/xx -> xxx.xxx.xxx.xxx/xxx.xxx.xxx.xxx
			$mask=long2ip('11111111111111111111111111111111'<<(32-$arNetAndMask[1]));

		$newNet = long2ip(ip2long($ip) & ip2long($mask));

		if($newNet == $net)
			return true;
		else
			continue;
	}

	return false;
}