Как определить, подходит ли IP маске?

Gluk

Новичок
Как определить, подходит ли IP маске?

допустим есть IP:
255.255.255.1
192.192.192.192
и т.д.

как определить подходят ли они под маску: * или 255.255.255.* или 192.*.168.16.1
и т.д.

регулярные выражения надо использовать или что?

Заранее спасибо :)
 

Кром

Новичок
преобразуй IP функцией ip2long() и производи сравнение, как с обычными числами.


А такие диапозоны 192.*.168.16.1 разбивай используя explode() и сравнивай по октетам
 

Кром

Новичок
Что то в этом роде. Думаю дальше сам разберешся.

PHP:
<?
$oct_mask = explode(".",'10.0.0.*');
$rem_ip = $_SERVER['REMOTE_ADDR'];
$oct = explode(".",$rem_ip);

function CheckMask ($oct,$oct_mask)
{
	for($i = 0; $i < 4; $i++)
	{
		if ($oct[$i] == $oct_mask[$i]) continue;
		if ($oct[$i] != $oct_mask[$i]) 
		{
			if ($oct_mask[$i] == '*') 
			{
				continue;
			} else {
				return FALSE;
			}
		}
	}
	
	return TRUE;
}

if (!CheckMask($oct,$oct_mask)) echo 'Error';
else echo 'Ok';
?>
 

Gluk

Новичок
спасибо, но такой код не работает, если маска *
 

IgorD

Guest
вообще обычно проверяют подходит ли IP к сети
А сети таким образом не записываются 168.*.17.2
ты корректно ставишь задачу ?
это я к тому что предыдушее решение при нормальной проверке адреса на сеть ничем тебе не поможет
 

Green Mother

Guest
эх, люблю регекспы... :rolleyes:
PHP:
$ip = "123.45.67.89";
$mask = "123.*.67.*";
// ----------------
// преобразовываем "маску" к регексповому виду:
$regexp = '/^'.str_replace(array('.', '*'), array('\.', '[\.\d]+'), $mask).'$/';
// и проверяем...
$check = preg_match($regexp, $ip);
echo (int)$check;
 
Сверху