Автор Тема: Проверяване на ip адрес  (Прочетена 958 пъти)

sunhater

  • Напреднали
  • *****
  • Публикации: 329
    • Профил
Проверяване на ip адрес
« -: Mar 14, 2006, 17:54 »
Здравейте,

Искам да реализирам рестрикции за IP адреси, за преглед на даден php скрипт. Искам да задавам IP пространствата в текстов файл по стандартния с маска начин - примерно 192.168.0.0/24 или 192.168.0.0/255.255.255.0. После искам да проверявам IP-то което браузва ($_SERVER["REMOTE_ADDR"]) дали е в това IP пространство и ако е - да се предоставя достъп до съдържанието. Та въпроса ми е има ли готова PHP библиотека/клас, който да върши тази работа. Вярвам че все на някой му се е налагала такава проверка и няма да ми се наложи да пиша топлата вода  '<img'>

Поздрави.
Активен

  • Гост
Проверяване на ip адрес
« Отговор #1 -: Mar 14, 2006, 18:22 »
Примерен код
Below is a merged form of all various notes, and a better (and correct) network matching function.

<?php

function net_match($network, $ip) {
     // determines if a network in the form of 192.168.17.1/16 or
     // 127.0.0.1/255.255.255.255 or 10.0.0.1 matches a given ip
     $ip_arr = explode('/', $network);
     $network_long = ip2long($ip_arr[0]);

     $x = ip2long($ip_arr[1]);
     $mask =  long2ip($x) == $ip_arr[1] ? $x : 0xffffffff << (32 - $ip_arr[1]);
     $ip_long = ip2long($ip);

     // echo ">".$ip_arr[1]."> ".decbin($mask)."\n";
     return ($ip_long & $mask) == ($network_long & $mask);
}

echo net_match('192.168.17.1/16', '192.168.15.1')."\n"; // returns true
echo net_match('127.0.0.1/255.255.255.255', '127.0.0.2')."\n"; // returns false
echo net_match('10.0.0.1', '10.0.0.1')."\n"; // returns true

?>
Активен

sunhater

  • Напреднали
  • *****
  • Публикации: 329
    • Профил
Проверяване на ip адрес
« Отговор #2 -: Mar 15, 2006, 17:48 »
Много благодаря! Този пример ми свърши чудесна работа.
Активен