|
|
|
|
|
для: Ralph
(30.06.2007 в 13:16)
| | Именно потому, что сети есть разных классов ( имеющие разное количество адресов хостов в подсети).
Основные классы:
A - с маской подсети 255.0.0.0 (или /8 в нотации cisco) и 16 миллионами адресов хостов.
B -с маской подсети 255.255.0.0 (или /16) и 65 тысячами адресов хостов.
C - с маской подсети 255.255.255.0 (или /24) и 254 адресами хостов. (или /24)
Но бывают и промежуточные: с n бит под адрес подсети и 32-n бит под адрес хоста.
Провайдеры очень любят раздавать адресное пространство интернета, например, подсетками вида 255.255.255.248 (или /29) с шестью хостами в сети.
Для почтовика, файрволла, демонов http, https и DNS, менеджемент-сервера SSH - в самый раз. Если слегка потеснить - даже на гейтвей останется. :) | |
|
|
|
|
|
|
|
для: Ralph
(30.06.2007 в 13:16)
| | Спасибо! Это я понял и сразу написал как положено... Вот не могу понять, что будет если делить не на 256, а на 128? | |
|
|
|
|
|
|
|
для: Trianon
(30.06.2007 в 11:46)
| | Извините,не совсем понял ваш ответ,особенно в скобках после слов "...класса С" ? И почему только "...пытается..." ? :-)
To Angel:Вчера меня сильно температурило,только сегодня заметил-какой нафиг update,конечно же insert.Кавычки не ставил,т.к. Пишу с телефона,а там с кавычками,особенно с обратными,сложно...И все же не очень полагайтесь на remote_addr :-) | |
|
|
|
|
|
|
|
для: Unkind
(29.06.2007 в 20:21)
| | >Совсем непонятно для чего Вы делите десятичное представление адреса на 256.
Наверное пытается получить адрес подсети, убрав номер машины из IP.
Правда справедливо это будет лишь для сетей класса C (/24, 255.255.255.0) | |
|
|
|
|
|
|
|
для: Angel_Hranitel
(29.06.2007 в 20:07)
| | 1. IP-адрес - строка. Поэтому нужно её обрамлять кавычками: INET_ATON('127.0.0.1').
2. Так как в запросе ошибка, то mysql_num_rows() возвращает boolean(false).
boolean(false) не подобно int(0). Поэтому условие "$q !== 0" является истинным и выводится надпись.
Совсем непонятно для чего Вы делите десятичное представление адреса на 256. | |
|
|
|
|
|
|
|
для: Ralph
(29.06.2007 в 18:33)
| | угу.... только вот проблема...
1) при добавление записи
$q="INSERT INTO bann SET
name='".$rezult['name']."',
ua='".$rezult['ua']."',
ip=FLOOR(INET_ATON(".$ip.")/256)";
|
ошибка
Ошибка при добавлении записи - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.0.1)/256)' at line 4
|
2) при определении забанен ли человек
разбил на 2 запроса
$q=mysql_query("SELECT * FROM bann WHERE name='$_SESSION[name]'");
$q=mysql_num_rows($q);
if ($q!==0)
{
echo "Внимание! Ваш ник добавили в бант лист!!!<br/>";
}
$ip=$REMOTE_ADDR;
$q=mysql_query("SELECT * FROM bann WHERE ip=FLOOR(INET_ATON(".$ip.")/256) AND ua=$HTTP_ACCEPT");
$q=mysql_num_rows($q);
if ($q!==0)
{
echo "Внимание! Ваш IP и UserAgent совпадает данными, добавлеными в бант лист!!!<br/>";
}
|
хоя таблица с баном пустая, но получаю
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in T:\home\virtual\site.ru\conf.php on line 148
Внимание! Ваш IP и UserAgent совпадает данными, добавлеными в бант лист!!!
|
| |
|
|
|
|
|
|
|
для: Ralph
(29.06.2007 в 18:26)
| | А в моем примере банится пользователь с ником Ralph ИЛИ кто то с другим ником,но(имеющий похожий на мой ip И такой-же,как у меня HTTP_ACCEPT) | |
|
|
|
|
|
|
|
для: Ralph
(29.06.2007 в 18:14)
| | Не обязательно делить на 256,изменив делитель,вы соответственно сузите или расширите диапазон блокируемых адресов.А ваша проверка порочна изначально,потому-что базируется только на логике И (AND).К примеру,некий Ralph нас...л в вашей гостевой,вы его забанили...Но если тот же Ralph зайдет с другого агента или просто изменится его ip (а при использовании Мини-Оперы REMOTE_ADDR меняется чуть ли не при каждом заходе,то ваш скрипт скажет мне "добро пожаловать" | |
|
|
|
|
|
|
|
для: Angel_Hranitel
(29.06.2007 в 15:54)
| | Ну,к примеру,получаем айпи юзверя if(isset($HTTP_X_FORWARDED_FOR)){$ip=$HTTP_X_FORWARDED_FOR} elseif(isset($HTTP_X_REAL_IP)){$ip=$HTTP_X_REAL_IP} else{$ip=$REMOTE_ADDR;} заносим в таблицу бани UPDATE ban SET name=$name,ua=$HTTP_ACCEPT,ip= FLOOR(INET_ATON($ip)/256) позже проверяем SELECT * FROM ban WHERE name=$name OR (ip=FLOOR(INET_ATON($ip)/256) AND ua=$HTTP_ACCEPT) | |
|
|
|
|
|
|
|
для: Ralph
(29.06.2007 в 10:46)
| | Ralph, не совсем понял... Можно примерчик? | |
|
|
|
|