Форум по Delphi программированию

 



Вернуться   Форум по Delphi программированию > Общие вопросы > WEB-Программирование
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.04.2015, 21:52
Pcrepair Pcrepair вне форума
Новичок
 
Регистрация: 20.01.2015
Сообщения: 52
Версия Delphi: Pascal
Репутация: 10
По умолчанию Диапазон IP-адресов вставить в массив

Добрый день.
Есть следующая ситуация :

PHP код:
<?php
$cur_ip_adrr 
$_SERVER['REMOTE_ADDR'];  //получили текущий адресс
$ip_array = array('192.168.0.1','192.168.0.2','192.168.0.3','127.0.0.1');  //массив по простому
if (in_array($cur_ip_adrr$ip_array))  echo 'YES';  //проверили вхождение элемента в массив
?>

Но на самом деле массив ИП-адресов выглядит так 66.231.188.0/24 (для примера), точнее таких массивом много (допустим 10)

Вопрос : как средствами РНР из 66.231.188.0/24 сделать последовательность элементов?
Ответить с цитированием
  #2  
Старый 20.04.2015, 21:58
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,458
Версия Delphi: 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Pcrepair
Добрый день.
Есть следующая ситуация :

PHP код:
<?php
$cur_ip_adrr 
$_SERVER['REMOTE_ADDR'];  //получили текущий адресс
$ip_array = array('192.168.0.1','192.168.0.2','192.168.0.3','127.0.0.1');  //массив по простому
if (in_array($cur_ip_adrr$ip_array))  echo 'YES';  //проверили вхождение элемента в массив
?>

Но на самом деле массив ИП-адресов выглядит так 66.231.188.0/24 (для примера), точнее таких массивом много (допустим 10)

Вопрос : как средствами РНР из 66.231.188.0/24 сделать последовательность элементов?
explode("/", '66.231.188.0/24');
Ответить с цитированием
  #3  
Старый 20.04.2015, 22:10
Pcrepair Pcrepair вне форума
Новичок
 
Регистрация: 20.01.2015
Сообщения: 52
Версия Delphi: Pascal
Репутация: 10
По умолчанию

вообщето строка 66.231.188.0/24 должна трансформироваться в массив
66.231.188.1
66.231.188.2
66.231.188.3
66.231.188.4

и так далее
explode("/", '66.231.188.0/24') это точно об этом?
а то интерпретатор выдает
array(2) { [0]=> string(12) "66.231.188.0" [1]=> string(2) "24" }
Ответить с цитированием
  #4  
Старый 21.04.2015, 19:08
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,458
Версия Delphi: 7
Репутация: выкл
По умолчанию

Если так то дальше выбираете эл-т [0] (66.231.188.0), ищите последнюю точку, в цикле увеличиваете счетчик на 1, генерируете свои значения

Последний раз редактировалось Admin, 21.04.2015 в 19:11.
Ответить с цитированием
  #5  
Старый 21.04.2015, 21:31
Pcrepair Pcrepair вне форума
Новичок
 
Регистрация: 20.01.2015
Сообщения: 52
Версия Delphi: Pascal
Репутация: 10
По умолчанию

И вот что получилось :

PHP код:
<?php
//массив СИДР чиста для проверки работоспособности
$ip_array = array(
'192.168.0.0/24',    //доступ к серверу из ЛВС
'127.0.0.0/8'        //локальный хост
);

//текущий ИП-адрес посетителя
$cur_ip_adrr $_SERVER['REMOTE_ADDR'];

//функция определения вхождения ИП в СИДР, спасибо что подсказали
function ipCIDRcheck($ip$cidr) {
  list(
$net$mask) = explode('/'$cidr);
  return ( 
ip2long($ip) & (-1<<(32-$mask)) ) == ip2long($net);
}

//ЦИКЛ проверки вхождения текущего ИП в СИДРы
$flag false;
foreach(
$ip_array as $cur_cidr)
{
  if ((
ipCIDRcheck($cur_ip_adrr$cur_cidr)) == true
    {
$flag true; break;}  //при первом вхождении установить флаг и выйти из цикла
    
else
    {
/*может потом что то допишу*/}
}

if (
$flag == true)
  {echo 
'YES';}    //все отлично
  
else
  {echo 
'NO';}     //принмаем меры к нарушителю
?>

Теперь можно критиковать
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:11.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2020

ВКонтакте   Facebook   Twitter