Вопрос со списком IP

Ervin

Guest
Вопрос со списком IP

Добрый день!

Подскажите, пожалуйста, как забанить пользователя, который пользуется модемным соединением и каждый раз у него новый IP.
Если мне заранее известен список IP в приделах
111.111.126.0 - 111.111.127.255

Заранее спасибо.
 

SiMM

Новичок
> как забанить пользователя, который пользуется модемным соединением и каждый раз у него новый IP.
Никак. Без жертвоприношений ни в чём не повинных пользователей. В любом случае вопрос к PHP не имеет никакого отношения - читать про .htaccess
 

Ervin

Guest
Спасибо за Ваш ответ, хочется сделать в рамках PHP.
 

whirlwind

TDD infected, paranoid
Читать TCP/IP адреса, сети и маски. Максируешь недейственные биты адреса, и получаешь единственное число, определяющее предел.
 

DEEX

Guest
Можно куками.. но я так понимаю.. тут тебе это не подходит...
Можно перебором через масив. если этот айпи есть в масиве... тогда досвидание...
 

Ervin

Guest
Автор оригинала: DEEX
Можно куками.. но я так понимаю.. тут тебе это не подходит...
Можно перебором через масив. если этот айпи есть в масиве... тогда досвидание...
А как этот массив создать?
 

pauk

Новичок
Какой массив?
В данном случае здесь надо IP сравнить два числа - либо 126, либо 127.
Если маска 111.111.*, то сравниваем.

А вообще таких пользователей в жизни будет очень много.
 

whirlwind

TDD infected, paranoid
Ага, по IP голимо. Лучше закинуть куку (конечно не banned=1, а что нибудь менее прозрачное), а клиенту выдать - забанен по IP. И пусть парится, тыкается через прокси, других провов, etc...
 

Lews

Новичок
ip2long('111.111.126.0') <= ip2long('ип_пользователя ') &&
ip2long('ип_пользователя ') <= ip2long('111.111.127.255')
 

magic

lancer
PHP:
$host         = '111.111.126.5';

$denied_hosts = array(
    '111.111.126.0/8',
    '111.111.127.0/8'
);

if (is_denied($host)) {
    echo 'IP denied: '.$host;
} else {
    echo 'IP allowed: '.$host;
}

function is_denied($address) {
    global $denied_hosts;

    foreach ($denied_hosts as $mask) {
        $host = explode("/", $mask);

        $address = ip2long($address);
        $address = $address >> $host[1];
        $address = $address << $host[1];

        if ($address == ip2long($host[0])) return true;
    }

    return false;
}
Предложения по улучшению приветствуются.
 
Сверху