Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] [PHP] Доступ по диапазону IP - как? (http://forum.oszone.net/showthread.php?t=128044)

D_Master 08-01-2009 13:37 1000479

[PHP] Доступ по диапазону IP - как?
 
Всем привет!

Помогите пожалуйста: есть диапазон IP-адресов, можно ли каким-нибудь PHP-скриптом разрешить доступ к сайту только с этих IP? Использование MySQL не желательно :)

Coutty 08-01-2009 14:00 1000500

Маска IP-адресов - это типа 255.255.255.0? Или имеется в виду диапазон адресов?
Пример можно?

D_Master 08-01-2009 14:27 1000524

Цитата:

Цитата Coutty
имеется в виду диапазон адресов? »

Coutty, ох, тупанул, да, диапазон :)
Вот с этих диапазонов нужно разрешить доступ, а со всех остальных - запретить.
читать дальше »
Код:

62.33.83.0 - 62.33.83.255
62.33.133.0 - 62.33.133.255
83.234.84.0 - 83.234.86.255
83.234.120.0 - 83.234.123.255
87.103.160.0 - 87.103.167.255
90.188.32.0 - 90.188.63.255
92.124.192.0 - 92.124.223.255
92.126.128.0 - 92.126.129.255
92.126.132.0 - 92.126.135.255
212.0.64.0 - 212.0.95.255


Coutty 08-01-2009 15:09 1000546

PHP код:

// я точно не помню, как в php массивы делаются. Кажется так.
// 1 и 2 цифры - 1 и 2 октеты адреса. 3 цифра - нижняя граница диапазона третьего октета, 4 цифра - верхняя граница диапазона 3 октета. 4 октет адреса не рассматриваем, т.к. он роли не играет.
$allowed = [
   [
62338383],
   [
6233133133],
   [
832348486],
   [
83234120123],
   [
87103160167],
   [
901883263],
   [
92124192223],
   [
92126132135],
   [
21206495]
];

$addr $_SERVER["REMOTE_ADDR"]; // получаем адрес клиента
$addr explode("."$addr); // разбиваем по октетам. Можно было объединить с 1 строкой.
for ($i 0$i count($allowed); $i++)
   {
   
// проверяем совпадение первого и второго октетов и находится ли третий октет в интервале от "3" до "4" элемента в массиве
   
if ($addr[0] == $allowed[$i][0] && $addr[1] == $allowed[$i][1] && $addr[2] >= $allowed[$i][2] && $addr[3] <= $allowed[$i][4]) 
      {
      
$access 'granted';// если совпало, даём доступ
      
break;
      }
   }

if (
$access != 'granted') exit ("Не пущу!");

// а дальше код, который для избранных 

Может быть есть и более простой путь, но мне он неизвестен)

mar 08-01-2009 15:13 1000548

D_Master,
ну так просто надо брать
PHP код:

$_SERVER['REMOTE_ADDR'

и сравнивать с нужными диапазонами,
(для преобразования адресов к цифрам используем ip2long).
А дальше поступаете, как при неверном пароле - например redirect куда-нибудь в безопасное место.

написала, не видя кода Coutty
(но с ip2long - проще :))

D_Master 08-01-2009 15:52 1000570

Цитата:

Цитата mar
ну так просто надо брать
Код:

$_SERVER['REMOTE_ADDR']
и сравнивать с нужными диапазонами, »

Цитата:

Цитата mar
(но с ip2long - проще ) »

mar, извините, не могли бы вы показать пример? ;)

Sham 08-01-2009 16:45 1000615

PHP код:

function test_IP()
{
    
$IPs_arr = array
    (
        array(
'62.33.83.0',        '62.33.83.255'),
        array(
'62.33.133.0',        '62.33.133.255'),
        array(
'83.234.84.0',        '83.234.86.255'),
        array(
'83.234.120.0',    '83.234.123.255'),
        array(
'87.103.160.0',    '87.103.167.255'),
        array(
'90.188.32.0',        '90.188.63.255'),
        array(
'92.124.192.0',    '92.124.223.255'),
        array(
'92.126.128.0',    '92.126.129.255'),
        array(
'92.126.132.0',    '92.126.135.255'),
        array(
'212.0.64.0',        '212.0.95.255')
    );

    
$my_ip2long = @ip2long($_SERVER['REMOTE_ADDR']);

    foreach(
$IPs_arr as $IPs)
    {
        if
        (
            
$my_ip2long >= @ip2long($IPs[0]) &&
            
$my_ip2long <= @ip2long($IPs[1])
        )

        return 
true;
    }

    exit(
'здесь вам не тут!');
}

test_IP(); 


D_Master 08-01-2009 19:45 1000745

Sham, спасибо вам огромное!!! Все работает, цветет и пахнет :)


Время: 19:34.

Время: 19:34.
© OSzone.net 2001-