Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Не получили
письмо с кодом активации
?
1 час
1 день
1 неделя
1 месяц
Навсегда
Новости:
Начало
Помощь
Поиск
Календарь
Вход
Регистрация
Forum Webscript.Ru
»
Общие
»
Базы данных
»
Использование масок
« предыдущая тема
следующая тема »
Печать
Страницы: [
1
]
2
Вниз
Автор
Тема: Использование масок (Прочитано 6973 раз)
0 Пользователей и 1 Гость просматривают эту тему.
Ardzhan
Фанат форума
Постоялец
Сообщений: 205
+0/-0
0
Использование масок
«
:
04 Декабря 2002, 19:09:30 »
Передо мной стала такая задача. Есть база данных с IP адресами и шаблонами типа 127.*.*.7 (MySQL).
Как сделать проверку на пхп соответствует ли веденный IP хотя бы одной строке в базе???
Короче надо банить по IP и по маске. Кто-нибудь такое делал???
Записан
Tronyx
Модератор
Ветеран
Сообщений: 826
+0/-0
2
Использование масок
«
Ответ #1 :
04 Декабря 2002, 19:38:13 »
Кроспостинг корается!
Записан
С уважением, Владимир Гончаренко - COPI# 93
Ролевая онлайн игра
Stas
Фанат форума
Старожил
Сообщений: 304
+0/-0
0
Использование масок
«
Ответ #2 :
04 Декабря 2002, 21:03:27 »
ne proboval sohraniat\' v BD ip razbityi v 4 otdel\'nyh field:
===
field1 field2 field3 field4
127 0 0 7
a potom delat\' sql query tipa
WHERE field1=\'127\' and field4=\'7\'
Записан
Ardzhan
Фанат форума
Постоялец
Сообщений: 205
+0/-0
0
Использование масок
«
Ответ #3 :
04 Декабря 2002, 23:18:01 »
Нет, этот вариант не очень подходит. Можно ли регуляркой???
Записан
Xander
санитар леса
Глобальный модератор
Ветеран
Сообщений: 1780
+0/-0
2
Использование масок
«
Ответ #4 :
05 Декабря 2002, 01:34:44 »
э...может быть стоит хранить IP в виде битовой маски, и битовыми же операциями проверять соответствие этой маске?
Подробнее не буду, лень думать в такое время.
Записан
Jah\'d never let us down!
YA
Модератор
Глобальный модератор
Ветеран
Сообщений: 597
+0/-0
0
Использование масок
«
Ответ #5 :
05 Декабря 2002, 09:43:22 »
А RLIKE не подходит?
Если таблица большая, возможно, действительно надо разбивать на 4 поля (RLIKE, естественно, уже не понадобится) и индексировать их.
Записан
Литературный перевод с русского и английского на Perl. Дорого!
Xander
санитар леса
Глобальный модератор
Ветеран
Сообщений: 1780
+0/-0
2
Использование масок
«
Ответ #6 :
05 Декабря 2002, 11:58:47 »
Господа, не тупите, пожалуйста...
<?
php
$ip
=
"\\\\\\xC0\\\\\\xA8\\\\\\x00\\\\\\x05"
;
$mask
=
"\\\\\\xC0\\\\\\xA8\\\\\\x00\\\\\\xFF"
;
if ((
$ip
& ~
$mask
)==
"\\\\\\x00\\\\\\x00\\\\\\x00\\\\\\x00"
) {
echo
"IP matches mask"
;
} else {
echo
"IP doesnt matches mask"
;
}
?>
То же самое можно сделать на любом языке, в котором есть бмнарные операторы. И заверяю вас, это будет ГОРАЗДО проще и быстрее, чем хранение IP в четырех полях, RLIKE, или встроенные регекспы языка. Всего-то VARCHAR(4) и пара строчек кода...
Записан
Jah\'d never let us down!
Maniac
Ума нет - считай коллега
Глобальный модератор
Ветеран
Сообщений: 844
+0/-0
2
Использование масок
«
Ответ #7 :
05 Декабря 2002, 13:43:01 »
Цитировать
Господа, не тупите, пожалуйста...
Гы, сдается мне, что человек хочет создавать бан-листы. Т.е. проверять, удовлетворяет ли айпишник хоть чему-нибудь из бд. Что ему, для этого просто жизненно необходимо всю базу к себе вытягивать?
Записан
TANSTAAFL
ThE0ReTiC
Главный по тарелочкам
Глобальный модератор
Ветеран
Сообщений: 4041
+2/-0
2
Использование масок
«
Ответ #8 :
05 Декабря 2002, 13:51:47 »
Ardzhan
REGEXP смотри в мане mysql
все через него можно сделать на два.
Записан
AS IS...
Xander
санитар леса
Глобальный модератор
Ветеран
Сообщений: 1780
+0/-0
2
Использование масок
«
Ответ #9 :
05 Декабря 2002, 13:57:57 »
Maniac
,
ThE0ReTiC
есть же в MySql bitwise AND:
http://www.mysql.com/doc/en/Bit_functions.html#IDX1315
Неужели нельзя без регекспов обойтись, одними битовыми операциями?
(это я просто спрашиваю)
Записан
Jah\'d never let us down!
ThE0ReTiC
Главный по тарелочкам
Глобальный модератор
Ветеран
Сообщений: 4041
+2/-0
2
Использование масок
«
Ответ #10 :
05 Декабря 2002, 14:38:54 »
Xander
А может и можно.
Я просто через регулярки такую проблему решал и знаю, что это работает.
Записан
AS IS...
Ardzhan
Фанат форума
Постоялец
Сообщений: 205
+0/-0
0
Использование масок
«
Ответ #11 :
05 Декабря 2002, 15:21:55 »
Maniac
Да... Именно это. Если бы наоброт выбрать маску из базы, тогда проще SeLECT... Where ip LIKE \'127.0.0.%\'...
А как проверить, что одна из масок в базе соответствует IP???
Записан
Ardzhan
Фанат форума
Постоялец
Сообщений: 205
+0/-0
0
Использование масок
«
Ответ #12 :
09 Декабря 2002, 23:24:56 »
Xander
Не пашут эти биты...
Сделал функцию:
function
comparemask
(
$string
,
$mask
){
$mask
=
str_replace
(
"."
,
"\\."
,
$mask
);
$mask
=
str_replace
(
"*"
,
"(.+)"
,
$mask
);
if (
preg_match
(
"/
$mask
/i"
,
$string
)) {return
1
;} else {return
0
;}
}
Ну и что??? Выгружать теперь всю таблицу?
Записан
Макс
vir magni ingenii
Глобальный модератор
Ветеран
Сообщений: 3534
+0/-0
2
Использование масок
«
Ответ #13 :
09 Декабря 2002, 23:57:53 »
Ardzhan
если маски будут лишь 127.0.0.* или 127.0.*.* то имхо можно и через функции INET_ATON , INET_NTOA (не знаю быстрее ли они чем REGEXP)
если маски будут типа 127.*.0 то , как тебе уже тут писали - через REGEXP.
Записан
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )
Xander
санитар леса
Глобальный модератор
Ветеран
Сообщений: 1780
+0/-0
2
Использование масок
«
Ответ #14 :
10 Декабря 2002, 01:14:43 »
У меня есть ощущение, что пробежаться с битовыми операциями в PHP-массиве может быть быстрее, чем с регекспами в базе, но я в этом не уверен. А битовые операции MySQL действительно с символами не работают
Записан
Jah\'d never let us down!
Печать
Страницы: [
1
]
2
Вверх
« предыдущая тема
следующая тема »
Forum Webscript.Ru
»
Общие
»
Базы данных
»
Использование масок
Sitemap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28