Ограничение доступа через IP-диапазоны (PHP) - PullRequest
4 голосов
/ 05 мая 2011

По сути, я хочу, чтобы мой пользователь указал диапазон ip для доступа к тесту. Допустим, эти значения хранятся в моей базе данных:

от: 148.197.34.112

Кому: 148,197,34,255

Существуют ли какие-либо функции, которые я могу использовать для преобразования этих ip-адресов в числа для сравнения?

Очевидно, что если пользователь пытается загрузить страницу ... если его IP не находится в диапазоне IP-адресов, перенаправьте его.

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

Ответы [ 2 ]

6 голосов
/ 05 мая 2011

Функция ip2long () выполнит работу для адреса IPv4.

Чтобы преобразовать адрес IPv6 в 128-разрядное целое число, используйте функцию inet_pton () .

1 голос
/ 05 мая 2011

Если значения хранятся в базе данных именно в этом формате, то вы можете использовать функцию INET_ATON (по крайней мере для mysql) и ip2long () в php.

$iplong=ip2long($ip);
$q=mysql_query("SELECT * FROM ips WHERE INET_ATON(ip_from)<='".$iplong."' AND INET_ATON(ip_to)>='".$iplong."' LIMIT 0,1");

Но, конечно, будет гораздо лучше хранить длинные значения в БД, а не чистый IP.

...