Нужно модернизировать существующую систему авторизации на сайте, добавив проверку ip адреса на нахождение его в разрешенном диапазоне ip адресов. То есть, нужно проверить ip адрес входящего пользователя с разрешенным списком ip диапазонов. В базе данных будет лежать id пользователя, ip_min и ip_max. ip_min и ip_max представляются как статические ip адреса без указания масок. Предполагается, что у пользователя будет указано для входа несколько разрешенных подсетей. Как реализовать такую схему? Может где-то есть уже готовый подобный код? Помогите пожалуйста написать данную систему.
а в чем проблема? при входу проверять IP и все...если из "нашей" подсетки - велкам, не из нашей - отлуп...
Как собрать несколько массивов из ip_min и ip_max и прогнать ip клиента через все этим массивы и получить на выходе false или true ? Код, пожалуйста....
В базе данных представляю будет так: Код (Text): CREATE TABLE IF NOT EXISTS `ip_permission` ( `id` int(11) NOT NULL auto_increment, `client` int(10) NOT NULL, `min` varchar(50) NOT NULL, `max` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=14 ; INSERT INTO `ip_permission` (`id`, `client`, `min`, `max`) VALUES (11, 86, '127.0.0.0', '127.0.0.255');
Собственно, в этом и есть частичная суть вопроса. Или проще использовать маску /8 /16/24 /32 и работать только с ними? Добавлено спустя 5 минут 26 секунд: Да.. Думаю, проблема решена. Нашел выход -- Использовать маску. Функция: Код (Text): function netMatch ($CIDR,$IP) { list ($net, $mask) = explode ('/', $CIDR); return ( ip2long ($IP) & ~((1 << (32 - $mask)) - 1) ) == ip2long ($net); } var_dump(netMatch('127.0.0.1/32','127.0.0.2'));