Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: sunhater в Mar 14, 2006, 17:54



Титла: Проверяване на ip адрес
Публикувано от: sunhater в 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 библиотека/клас, който да върши тази работа. Вярвам че все на някой му се е налагала такава проверка и няма да ми се наложи да пиша топлата вода  ;)

Поздрави.


Титла: Проверяване на ip адрес
Публикувано от: в 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

?>


Титла: Проверяване на ip адрес
Публикувано от: sunhater в Mar 15, 2006, 17:48
Много благодаря! Този пример ми свърши чудесна работа.