Вопрос php

S
На сайте с 09.07.2013
Offline
63
537

Доброго дня.

Есть ip юзера

Есть список ip в виде:

222.222.22.192 - 222.222.22.255

Как узнать, что ip юзера попадает в этот диапазон?

Думаю сравнить их, приведя к числам через ip2long. IP юзера удалось привести к числу, а как диапазон?

Пробовал так:


$stroke = "222.222.22.192 - 222.222.22.255";
$check = strpos($stroke, " "); //ищем вхождение пробела
$first = substr($stroke, 0, $check); // получаем первый ip
$first = ip2long($first);// преобразовывем ip в число
$b = 2;
$second = substr($stroke, $b, $lenght_stroke);
$second = ip2long($second);

Первый ip преобразовывается в число, а второй почему то нет.

mr888
На сайте с 16.05.2016
Offline
54
#1

$ip="222.222.22";

If (eregi($ip,$_SERVER['REMOTE_ADDR']) ){

echo "найден";

}else{

echo "не найден";

}

Тут всю подсеть 222.222.22.0-222.222.22.255 фильтрует

И второй вариант

If (str_replace("\.","",$_SERVER['REMOTE_ADDR'])>="22222222192"){

echo "найден";

}

Тут 222.222.22.192-222.222.22.255

S
На сайте с 09.07.2013
Offline
63
#2
mr888:
$ip="222.222.22";
If (eregi($ip,$_SERVER['REMOTE_ADDR']) ){
echo "найден";
}else{
echo "не найден";
}

Тут всю подсеть 222.222.22.0-222.222.22.255 фильтрует

И второй вариант
If (str_replace("\.","",$_SERVER['REMOTE_ADDR'])>="22222222192"){
echo "найден";
}

Тут 222.222.22.192-222.222.22.255

А почему второй ip не переводит с помощью ip2long?

Joker-jar
На сайте с 26.08.2010
Offline
167
#3

Похоже, есть то, что вам нужно у меня в завалах модулей:

      function ip_in_network($ip, $net_addr, $net_mask)
{
if ( $net_mask <= 0 ) return false;
$ip_binary_string = sprintf( '%032b', ip2long($ip) );
$net_binary_string = sprintf( '%032b', ip2long($net_addr) );
return substr_compare($ip_binary_string, $net_binary_string, 0, $net_mask) === 0;
}

Второй параметр - адрес подсети, например 222.222.22.192. Третий - битность маски. В вашем примере, похоже, 26.

S
На сайте с 30.09.2016
Offline
469
#4
sstixx:
А почему второй ip не переводит с помощью ip2long?

Потому что "второй" - это не ip, а какая-то белиберда.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
S
На сайте с 18.03.2013
Offline
36
#5

/*Проверяет, попадает ли адрес IP в сеть CIDR. Возвращает true или false*/

function netMatch($CIDR,$IP) {

list ($net, $mask) = explode ('/', $CIDR);

return (ip2long($IP) & ~((1 << (32 - $mask)) - 1)) == ip2long($net);

}

CIDR в формате 222.222.222.192/26

Samail
На сайте с 10.05.2007
Offline
369
#6

$ipuser = '222.222.22.192';

if (ip2long($ipuser)>=ip2long('222.222.22.192') && ip2long($ipuser)<=ip2long('222.222.22.255') )
{echo 'IP входит в диапазон';}else{echo 'IP не входит в диапазон';}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий