Сложен бан в сайта

Ev0luti0N

Registered
Искам да попитам тей като вече станаха много динамичните ИП-та. Как може да се премахне дадена мрежа или пък даден потребител от сайта няма значение по къв начин. Чуваш съм, че имало някъв ID на компютъра и по него може се банне и тогава не може да влиза и да си сменя ИП-то. Но пък някой казват, че няма такъв вариянт и имало някъв вариянт при който се премахва направо цялата мрежа(интернет) и не може да се влиза.

Някакви идеи? благодаря :)
 
Имам една идея.

PHP:
<?php
$mreja = "78.159.136.*"; // това е мрежата
$ip = $_SERVER['REMOTE_ADDR']; // ip на клиента
$a = explode(".",$ip); // разделяме ip
$count = count($a) - 2; //преброяваме разделите
for($i=0;$i<=$count;$i++) // вътре в for (на долните редове) създаваме промнлива на ip-то без последните цифри.
{
if ($i == $count)
{
$ipmreja .= $a[$i];
}
else
{
$ipmreja .= $a[$i].".";
}
}
$checkip = $ipmreja.".*"; // добавяме мрежа на ip-то .*
if ($checkip == $mreja) //проверяваме ако ip-то е като баннатата мрежа
{
echo "Banned"; //извеждаме надпис Banned и спираме достъпа към сайта
exit;
}
echo "No banned"; // от тук надолу си продължава сайта и ще се вижда от ip-та които не са баннати.
?>

Мрежата се задава на първи ред.
И да речем ако си избрал мрежата 78.159.136.0 до 78.159.136.255

Ще напишеш 78.159.136.*

И която и мрежа да избереш накрая слагаш махаш последните 1,2 или 3 цифри (колкото са след последната точка) и слагаш звезда като тази *

Тествах го на localhost и работи.
 
Можеш ли ако обичаш да ми го стимулирах ако туря 95.*.*.* смисъл такъв където и да търя * да работи :) само опред числата да са задължителни :p
 
Със сигурност ще има по-кратък код от този , но аз за този се сетих.
А иначе ето го променено:

PHP:
<?php
$mreja = "78.*.*.*"; // това е мрежата
$ip = $_SERVER['REMOTE_ADDR']; // ip на клиента
$a = explode(".",$ip); // разделяме ip
$count = count($a) - 4; //преброяваме разделите
for($i=0;$i<=$count;$i++) // вътре в for (на долните редове) създаваме промнлива на първите цифри от ip-то.
{
if ($i == $count)
{
$ipmreja .= $a[$i];
}
else
{
$ipmreja .= $a[$i].".";
}
}
$checkip = $ipmreja.".*.*.*"; // добавяме мрежа на ip-то .*.*.*
if ($checkip == $mreja) //проверяваме ако ip-то е като баннатата мрежа
{
echo "Banned"; //извеждаме надпис Banned и спираме достъпа към сайта
exit;
}
echo "No banned"; // от тук надолу си продължава сайта и ще се вижда от ip-та които не са баннати.
?>
 
PHP:
<?php
$mreja = "192.167.*";
$ip = $_SERVER['REMOTE_ADDR'];
$a = count(explode(".",$mreja)) - 2;
$b = explode(".",$ip);
for($i=0; $i<=$a; $i++){
if($i != $a){
$ipparse.= "$b[$i].";
}else{
$ipparse.= "$b[$i].*";
}
}
if ($ipparse == $mreja){
echo "Banned";
exit;
}
echo "No banned";
?>
ето аз какво измислих то е почти като на proba обаче така май е по оптимизирано
Значи тук обаче например 192.* и това спира достъпа на всички ip-та започващи така без да пишеш до края може да си сложиш и 192.1.* и е ок или 192.1.2.* и е ок обаче ако напишеш 192.1.2.3 демек цяло ip то все едно е 192.1.2.* . Може да се оправи обаче ти искаш за мрежи а не за точно дадено ip.
 
Благодаря и на двамата, soRry ако може найстина да го направиш и ако е цял IP адреса да банва само него и ще стане супер да си ползвам направо твоя код :)
 
Ето ти го:

PHP:
<?php
$mreja = "192.167.*";
$ip = $_SERVER['REMOTE_ADDR'];
$pr = $mreja;
$pr = str_replace("*","Y",$pr);
if (preg_match("/Y/i", $pr))
{
$a = count(explode(".",$mreja)) - 2;
$b = explode(".",$ip);
for($i=0; $i<=$a; $i++){
if($i != $a){
$ipparse.= "$b[$i].";
}else{
$ipparse.= "$b[$i].*";
}
}
if ($ipparse == $mreja){
echo "Banned";
}
else
{
echo "No banned";
}
}
else
{
if ($ip == $mreja)
{
echo "Banned";
}
else
{
echo "No Banned";
}
}
?>

;)
 
PHP:
<?php
$ban = "192.168.1.105";
$ip = $_SERVER['REMOTE_ADDR'];
if(preg_match("/(\*)/",$ban)){
$a = count(explode(".",$ban)) - 2;
$b = explode(".",$ip);
for($i=0; $i<=$a; $i++){
if($i != $a){
$ipparse.= "$b[$i].";
}else{
$ipparse.= "$b[$i].*";
}
}
}else{
$ipparse = $ip;
}
if ($ipparse == $ban){
echo "Banned";
exit;
}
echo "No banned";
?>

ето пак е като преди и вече можеш и цяло ип да пишеш
 
човека каза че иска да го интегрира с база от дани е то какво му направих
PHP:
<?php
function check($ban){
$ip = $_SERVER['REMOTE_ADDR'];
if(preg_match("/(\*)/",$ban)){
$a = count(explode(".",$ban)) - 2;
$b = explode(".",$ip);
for($i=0; $i<=$a; $i++){
if($i != $a){
$ipparse.= "$b[$i].";
}else{
$ipparse.= "$b[$i].*";
}
}
}else{
$ipparse = $ip;
}

if ($ipparse == $ban){
echo "Banned";
exit();
}
}
$row = mysql_query("SELECT * FROM `ban`"); // таблицата с бановете
while($result = mysql_fetch_assoc($row)){
$ban = $row['ips']; //полето с мрежите или ип та
check($ban);
}

echo "Всичко от тук надоло ще бъде видяно ако човека не е баннът";

?>
сигурно ще има и по бърз вариант
 

Back
Горе