Ограничение доступа по IP

Тема в разделе "Модификации для TorrentPier (архив)", создана пользователем Fatum, 7 авг 2011.

  1. Fatum

    Fatum Пользователь

    Сообщения:
    103
    Симпатии:
    6
    Есть хак ограничения захода по IP адресам. Вот он:
    Код:
    
    $acess_prov = array(
    "80.82.60.225",
    "87.229.156.191/24",
    "127.0.0.1/24",
    "80.83.224.0/24",
    
    );
    
    function net_match ( $networks , $ip )
    {
        foreach ($networks as $network)
        {
            $ip_arr = explode ( '/' , $network );
            $network_long = ip2long ( $ip_arr [ 0 ]);
            $hexmask = 0xFFFFFFFF;
    
            $x = ip2long ( $ip_arr [ 1 ]);
            $mask = long2ip($x) == $ip_arr[1] ? $x : 0xffffffff << (32 - $ip_arr[1]);
            $ip_long = ip2long ( $ip );
    
            if (($ip_long & $mask) == ($network_long & $mask))
            {
                return true;
                break;
            }
        }
        return false;
    }
    $email = "****@yandex.ru";
    if (!net_match($acess_prov, $_SERVER["REMOTE_ADDR"]))
    {
        die("<html>
        <body>
        <br /><br /><br />
        <center><h2>Доступ для вашей сети запрещен.</2>
        <br />
        <h3>Если Вы распологаетесь на территории ************* напишите администратору.
        <br />E-Mail: admin@****.me
        <br /> В письме укажите свой IP адрес и провайдера.</h3></center>
        </body></html>");
    }
    unset($acess_prov, $email);
    
    
    Проблема в том что хак по смыслу изначально подрозумевает что сети разрешины и мы прописываем то что запрещаем.
    Мне это очень не удобно!
    Кто сможет переделать хак таким образом чтобы изначально все сети были запрещены и только указывая адрес или диапазон адресов им было рарещен доступ?
    При этом крайне желательно чтобы диапазон адресов в хаке указывался
    не в формате 80.83.224.0/24 а в формате 80.83.224.0 - 80.83.225.255
     
  2. PheRum

    PheRum Разработчик

    Сообщения:
    1.074
    Симпатии:
    480
    Версия TP:
    , иная
    так а смысл тогда от такого трекера? или 3 человека в онлайне и 2 раздачи это сейчас модно?
     
  3. Fatum

    Fatum Пользователь

    Сообщения:
    103
    Симпатии:
    6
    Жил бы ты на острове, был бы у тебя интернет по цене унции золота- ты бы смысл на телепатическом уровне понял. Сытый голодного не разумеет!
    Я не прошу понять, я прошу по возможности такой хак сделать :)
    ограничения в нашем регионе популярны так как берегут деньги пользователей..... не тебе же счета по 20000 в месяц приходят ;)
     
  4. PheRum

    PheRum Разработчик

    Сообщения:
    1.074
    Симпатии:
    480
    Версия TP:
    , иная
  5. Exile

    Exile Администратор

    Сообщения:
    3.110
    Симпатии:
    1.708
    Версия TP:
    2.2.3
    config.php
    PHP:
    $bb_cfg['acess_prov'] = array("10.0.0.0/8""109.60.128.0/17");
    includes/sessions.php

    Перед:
    PHP:
                    // Start mod/admin session
                    
    if ($mod_admin_login)
    Вставить:
    PHP:
                    if(!net_match($bb_cfg['acess_prov'], $_SERVER["REMOTE_ADDR"]))
                    {
                        
    print_page('local.tpl');
                        die();
                    }
    includes/functions.php
    PHP:
    function net_match ($networks $ip)
    {
        foreach (
    $networks as $network)
        {
            
    $ip_arr explode '/' $network );
            
    $network_long ip2long $ip_arr ]);
            
    $hexmask 0xFFFFFFFF;

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

            if ((
    $ip_long $mask) == ($network_long $mask))
            {
                return 
    true;
                break;
            }
        }
        return 
    false;
    }
    В шаблоне local.tpl (создать надо) пишешь произвольный текст, который будет выводиться пользователям, не относящимся к указанным в конфиге сетям.

    PS. Выше вижу идентичный код. Ну тут да, переделанное под указание только тех кто может войти (одно-единственное условие), а вот с диапазонами адресов сложнее - в интернете просто конвертер найди, который переводит диапазон в адрес с маской, вот и будет решение проблемы.
     
    krumax нравится это.
  6. Fatum

    Fatum Пользователь

    Сообщения:
    103
    Симпатии:
    6
    Я видимо протупливю, но действительно не понимаю чем отличается новый код от старого? он по умолчанию запрещает сети и разрешает доступ только указанным в нем IP ?
    И можно ли сделать так как это было в первом хаке- весь код размещался в одном месте в config.php
     
  7. Exile

    Exile Администратор

    Сообщения:
    3.110
    Симпатии:
    1.708
    Версия TP:
    2.2.3
    Да, в данном варианте запрещены все сети кроме указанных в конфиге. Да, можно вынести весь код в один из инициирующих файлов, например common.php, но в моем случае пользователи получат сообщение о том, что ресурс для них не предназначен только при попытке входа. Таким образом форум будет нормально индексироваться поисковыми системами, вы сможете сами определить какие форумы смогут видеть гости, но в то же время пользоваться ресурсом смогут только пользователи принадлежащие определенным диапазонам IP-адресов.
     
  8. dimka3210

    dimka3210 Пользователь

    Сообщения:
    1.306
    Симпатии:
    519
    Exile, как я понял, ему нужно совершенно обратное от этого мода. Т.е. тут не пускает тех, кто в списке, а ему нужно наоборот. Для этого достаточно
    PHP:
    if (!net_match($acess_prov$_SERVER["REMOTE_ADDR"]))
    заменить на
    PHP:
    if (net_match($acess_prov$_SERVER["REMOTE_ADDR"]))
    думаю как то так. :)
     

Поделиться этой страницей