Автор Тема: Использование масок  (Прочитано 6765 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
Использование масок
« : 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
    • Просмотр профиля
    • http://www.isfuture.com
Использование масок
« Ответ #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
    • Просмотр профиля
    • http://ardzhan.km.ru
Использование масок
« Ответ #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
    • Просмотр профиля
    • http://
Использование масок
« Ответ #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
    • Просмотр профиля
    • http://
Использование масок
« Ответ #7 : 05 Декабря 2002, 13:43:01 »
Цитировать
Господа, не тупите, пожалуйста...

Гы, сдается мне, что человек хочет создавать бан-листы. Т.е. проверять, удовлетворяет ли айпишник хоть чему-нибудь из бд. Что ему, для этого просто жизненно необходимо всю базу к себе вытягивать?
TANSTAAFL

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Использование масок
« Ответ #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
    • Просмотр профиля
    • http://
Использование масок
« Ответ #10 : 05 Декабря 2002, 14:38:54 »
Xander
А может и можно. :)
Я просто через регулярки такую проблему решал и знаю, что это работает.
AS IS...

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
Использование масок
« Ответ #11 : 05 Декабря 2002, 15:21:55 »
Maniac
Да... Именно это. Если бы наоброт выбрать маску из базы, тогда проще SeLECT... Where ip LIKE \'127.0.0.%\'...
А как проверить, что одна из масок в базе соответствует IP???

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
Использование масок
« Ответ #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!•••

 

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