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

Fatum

Пользователь
#1
Есть хак ограничения захода по 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
 

PheRum

Разработчик
#2
так а смысл тогда от такого трекера? или 3 человека в онлайне и 2 раздачи это сейчас модно?
 

Fatum

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

Exile

Администратор
#5
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 [ 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;
}
В шаблоне local.tpl (создать надо) пишешь произвольный текст, который будет выводиться пользователям, не относящимся к указанным в конфиге сетям.

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

Fatum

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

Exile

Администратор
#7
Я видимо протупливю, но действительно не понимаю чем отличается новый код от старого? он по умолчанию запрещает сети и разрешает доступ только указанным в нем IP ?
И можно ли сделать так как это было в первом хаке- весь код размещался в одном месте в config.php
Да, в данном варианте запрещены все сети кроме указанных в конфиге. Да, можно вынести весь код в один из инициирующих файлов, например common.php, но в моем случае пользователи получат сообщение о том, что ресурс для них не предназначен только при попытке входа. Таким образом форум будет нормально индексироваться поисковыми системами, вы сможете сами определить какие форумы смогут видеть гости, но в то же время пользоваться ресурсом смогут только пользователи принадлежащие определенным диапазонам IP-адресов.
 

dimka3210

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