Автор |
Сообщение |
Grizli Карма: 0 |
Добавлено: 23:08 23 января 2010 | Исправлялось: 2 раз (23-01-10 23:39, Hafner) | |
|
Автор: Hafner Цитата:
Какой результат Вам нужен?
- Запрет знака "/" в чате в любом слове?
- Запрет всех слов, где есть идущие подряд одинаковые буквы? Какое количество букв будет запрещено?
Мне достаточно примера, как запретить слово скажем "b/I9" (бля) и "/Iox" (лох).
А так же, если возможно "looox" чтоб его блокировало независимо от количества "o"
Как только я поставил плагин, началась война Я постоянно обновляю словарь, юзеры ищут пути обхода. И пока в словах содержащих символы "/" и (обратная ей) из которых составляют букву "Л" меня побеждают
Вот например мой словарь на сегодня )
d(o|0)(l|ji)(b|6)(o|a|0)e(b|6)
d (o|0) (l|ji) (b|6) (o|a|0)e(b|6)
go(l|ji)(6|b)a(h|n)a
d(i|u)(b|6)(i|u)(l|ji)
d (i|u) (b|6) (i|u) (l|ji)
download
(n|tt|p)(u|i)d(o|e|a|0)(r|p)
(n|tt|p) (u|i) d (o|e|a|0) (r|p)
(ji|l)(o|0)x
(ji|l) (o|0) x
(ji|l)(o|0)(sh|w|iii)a(r|p)
(ji|l) (o|0) (sh|w|iii) a (r|p) a
e(b|6)(a|o|0)(l|ji|h|n|t)
e(6|b)(l|ji)(a|o|0)
e (6|b) (l|ji) (a|o|0)
e(b|6)u(4|h|ch)
(z|3)ad(p|r)(o|0)t
m(u|y)da(k|g)
m (u|y) d a (k|g)
m(u|y)d(i|u)(l|ji)
m (u|y) d (i|u) (l|ji)
m(y|u)dae(6|b)
(4|ch)m(o|0)
(4|ch) m (o|0)
m(r|p)a(z|3)
m (r|p) a (z|3)
(g|r)a(n|h)d(o|0)(n|h)
(g|r) a (n|h) d (o|0)(n|h)
(o|0)(l|ji)e(n|h)b
(o|0) (l|ji) e (n|h) b
xyu
x y u
hui
(n|h)axyu
(c|s)(o|0)(c|s)(h|n)e(sh|iii)
(c|s)(o|0)(c|s)e(ch|iii)
(c|s)(o|0)(c|s)i
(c|s) (o|0) (c|s) i
Возможно конечно что-то и можно оптимизировать, но я на больше неспособен 
Просто запретить символ "/" нельзя, поскольку тогда не будут работать нужные чат команды.
|
Hafner Карма: 0 |
Добавлено: 23:38 23 января 2010 | Исправлялось: 1 раз (23-01-10 23:42, Hafner) | |
|
Я выше ссылку на ман по регуляркам кидал, там всё доходчиво написано 
Для запрета "loooox":
lo{1,}x
Для запрета "b/I9":
b/i9
И прошу не флудить по 2 сообщения в течении нескольких минут. Есть кнопка "Правка".
|
Grizli Карма: 0 |
Добавлено: 01:25 24 января 2010 | |
|
Автор: Hafner Цитата:
Я выше ссылку на ман по регуляркам кидал, там всё доходчиво написано 
Яж не спорю, действительно доходчиво, но до меня не доходит 
Автор: Hafner Цитата:
Для запрета "loooox":
lo{1,}x
Для запрета "b/I9":
b/i9
С lo{1,}x, всё отлично, спасибо 
b/i9 не работает
|
Hafner Карма: 0 |
Добавлено: 01:35 24 января 2010 | |
|
Автор: Grizli Цитата:
b/i9 не работает 
Всё должно работать. Вы вбили в словарь точно так как указано? Какое слово вбиваете и плагин не реагирует?
|
Grizli Карма: 0 |
Добавлено: 02:09 24 января 2010 | Исправлялось: 5 раз (24-01-10 03:27, Grizli) | |
|
А сори, забыл при последней проверке про админку 
Теперь бы с еще одним вариантом буквы L в CS разобраться.
Здесь я его написать не могу, форум обрезает поэтому вот скрин.
[URL=ссылка] ссылка">[/URL]
|
Hafner Карма: 0 |
Добавлено: 13:52 24 января 2010 | |
|
Чтобы задать проверку спецсимвола, который используется в регулярках, а в нашем случае это обратный слэш, необходимо перед ним поставить ещё один обратный слэш.
ссылка
|
Admin Карма: 9 |
Добавлено: 21:31 25 января 2010 | |
|
нашел неприятный косяк в плагине.
В виду того, что он загружает словари по 242 байта, то если словарь длинный получаются неправильные переносы строк типа:
badb
oy
Кто найдет, как починить, напишите
|
Admin Карма: 9 |
Добавлено: 17:43 30 января 2010 | |
|
нет идей?
|
Hafner Карма: 0 |
Добавлено: 18:18 30 января 2010 | |
|
Это при обновлении словарей такое происходит?
|
Admin Карма: 9 |
Добавлено: 18:33 30 января 2010 | |
|
да. при обновлении идет чтение из сокета по 244 байта. если на 244 байт приходится середина слова, то его разбивает на 2 строки
|
Hafner Карма: 0 |
Добавлено: 16:18 2 февраля 2010 | |
|
Вобщем добрался я до плагина и посмотрел, что там к чему. Решений есть несколько - начиная от увеличения размера пакета и, чтобы словарь не превышал в дальнейшем это значение и заканчивая проверкой каждой полученной строки.
Сейчас, к сожалению, нет доступа к машине, чтобы проверить некоторые варианты и пока оптимальный механизм проверки строки не лезет в голову. Как только так сразу выложу рабочее решение.
|
Admin Карма: 9 |
Добавлено: 17:36 2 февраля 2010 | |
|
размер пакета не спроста 242 байта - это соответствует размеру заголовка. я был без понятия, как отрезать заголовки со служебной информацией от собственно словаря, поэтому при апдейте просто пропускаю первый заголовок
|
Hafner Карма: 0 |
Добавлено: 23:19 3 февраля 2010 | Исправлялось: 4 раз (04-02-10 03:14, Hafner) | |
|
Сижу и тестирую фикс для плагина и недоумеваю, где я допустил такой косяк, что после апдейта оргомный пробел в файле bans.ini, хорошо, что решил сверить с оригиналом.
Есть возможность для теста файл какого-нибудь словаря залить в том виде, в котором он косячил? Влом к себе на хост заливать и пути перебивать...
И ещё, это у меня косяк или плагин при обновлении первую строку не заполняет?
// update
Всё таки залил к себе, всё работает корректно + убрал эти отступы, которые создаются в начале файла, но разная длина заголовка там принимается, поэтому треба тест непосредственно на этом адресе.
|
Admin Карма: 9 |
Добавлено: 10:03 4 февраля 2010 | |
|
ок. вечером уберу пробел
почему первая строка пустая разобрался? это тоже из-за склеивания пакетов
|
Hafner Карма: 0 |
Добавлено: 10:30 4 февраля 2010 | |
|
Да это из-за заголовка, поставить длину меньше на 1 и не будет пробелов в файлах bans.ini и slapandgags.ini, но обрежется первый символ в файле kicks.ini
Это происходит из-за разной длины, отображаемой в заголовке. Для примера ниже 2 строчки, одна из которых длинее другой на 1 символ, вот этот один символ и добавляется, однако, файл kicks.ini имеет длину двухзначную и следовательно символ не добавляется и там всё четко 
Content-Length: 100
Content-Length: 99
|
Admin Карма: 9 |
Добавлено: 11:54 4 февраля 2010 | |
|
есть идеи, как обрезать заголовок более корректно чем по захардкоденной длине?
ну или есть какой-то правильный способ получения содержимого файла по http?
|
Nup Карма: 0 |
Добавлено: 14:06 4 февраля 2010 | Исправлялось: 2 раз (04-02-10 15:07, Hafner) | |
|
а если не сокетами забирать файл а file_get_contents?
upd: жутко туплю, сорри )
а почему загрузка идет по 242 байта?
в мануале(ссылка) пример реализован вот так:
socket_recv(sock,readBuffer,2048)
|
Hafner Карма: 0 |
Добавлено: 15:06 4 февраля 2010 | |
|
Автор: Nup Цитата:
а почему загрузка идет по 242 байта?
в мануале( ссылка) пример реализован вот так:
socket_recv(sock,readBuffer,2048)
Покажи как заголовок отрезать будешь в таком случае.
|
Nup Карма: 0 |
Добавлено: 15:46 4 февраля 2010 | |
|
Я в amxx синтаксисе не очень шарю, вот нашел пример:
public read_web()
{
const SIZE = 63
new line_variable[SIZE + 1], line_value[SIZE + 1]
if (socket_change(g_sckweb, 100))
{
new buf[512], lines[30][100], count = 0
socket_recv(g_sckweb, buf, 511)
count = ExplodeString(lines, 50, 119, buf, 13)
for(new i=0;i<count;i++)
{
parse(lines[i], line_variable, SIZE, line_value, SIZE)
if (equal(line_variable, "some_value"))
{
server_print("Value is %s", line_value)
}
}
if (g_sckweb != 0)
set_task(0.5, "read_web")
else
disconnect_web()
}
Собственно суть - прочитать информацию полностью, а потом отрезать ненужное.. или вытащить нужное из ненужного ;)
Как вариант - можно словари на серваке хранить в одном виде, с разделителями (например через ";"), а потом делать explode как раз по этому разделителю. Ну вот както так
|
Hafner Карма: 0 |
Добавлено: 21:25 4 февраля 2010 | |
|
Автор: Admin Цитата:
ок. вечером уберу пробел
жду
2Nup,
когда код выкладываете, то пишите плиз полный листинг для наглядности. Где функция ExplodeString?
Ладно, не суть, суть на самом деле ясна и заключается в подсчете строк и построчно читать информацию с проверкой каждой строки на наш разделитель.
Вам не кажется, что слишком много условий?) Проще вначале откинуть заголовок, а всё остальное содержимое записать в файл.
|
|
|