About Blog PGP Key

All articles, tagged with “gluxi”

Всякие отчетики

Захотелось мне посмотреть распределение своего флуда в конфах по времени. Получилось нечто типа следующего:

!muc stat day

Message statistic for "Гадский демон":
Mon  |#################### (75)  
Tue  |# (4)                      
Wed  |## (10)                    
Thu  | (0)                       
Fri  |################# (64)     
Sat  |##### (21)                 
Sun  |##### (20)

!muc stat hour

Message statistic for "Гадский демон":
00:00  |#################### (43)  
01:00  |########## (23)            
02:00  |### (7)                    
03:00  | (0)                       
04:00  | (0)                       
05:00  | (0)                       
06:00  | (0)                       
07:00  | (1)                       
08:00  | (0)                       
09:00  |### (8)                    
10:00  | (0)                       
11:00  | (0)                       
12:00  | (0)                       
13:00  |# (4)                      
14:00  |################ (36)      
15:00  |######## (18)              
16:00  | (0)                       
17:00  | (0)                       
18:00  | (2)                       
19:00  |# (3)                      
20:00  |####### (17)               
21:00  | (0)                       
22:00  |######## (19)              
23:00  |###### (14)

Плохо, что инфа есть в базе только с 03.06.2009 ;)

Засовывание MUC логов в SQL

За сутки уже набежало:

gluxi=> select count(*) from conference_log;
 count
-------
 35717
(1 row)

Интересно, на сколько глупой идеей это было и как скоро это всё начнет тормозить?

Машину времени изобрели!!!

Гладиолус: Pong from Гладиолус after -85601.2 secs.

<message from='***@conference.jabber.ru/Зомби' to='gluxi@inhex.net/GluxiBot-dev' xml:lang='en' type='groupchat'>
   <body>Гладиолус: Pong from Гладиолус after -85601.2 secs.</body>
</message>
</pre>

PS. Кроме какого-то переполнения на ум ничего не приходит… С другой стороны, на пинги таймаут стоит, который гарантированно влезит в long…

Шейпер на jabber.ru

Мне таки кажется, что на jabber.ru установлен какой-то умный шейпер не только на c2s но и на s2s. Станзы <presence /> и <iq /> доставляются моментально, а <message /> тормозят… Очень похоже, что есть ограничение в количество станз в единицу времени на все конференции.

Судя по тому, что с другими серверами, вроде jabbus.org все нормально, это таки не канал.

Надо будет как-то померять что-то.

DoS двух ботов на conference.jabber.ru

Сегодня после очередного фикса получилось нечтно типа DoS в одной из конференций на conference.jabber.ru.

В конфигураторе глюкса стоит галочка “запрашивать версию всех входящих посетителей” и таймаут на ответ в 1 секунду. Если за одну секунду бот не получает ответ на запрос версии, то просто забивает на это и считает что версия скрыта. Если же ответ на запрос версии таки дойдет через время, большее таймаута, то глюкс в ответ отправит стазу

<iq type='error' to='muc-room@conference.jabber.ru/User' id='some_id'>
  <query xmlns='jabber:iq:version'/>
</iq>

что в принципе не совсем корректно. Хотя с другой стороны, этот ответ не был обработан, и об этом можно сообщить другой стороне.

Другой бот, Talisman, на cтанзу вида

<iq type='error' to='foo@conference.jabber.ru/Talisman' id='uid74'>
  <query xmlns='jabber:iq:version'/>
</iq>

шлет информацию о своей версии. Глюкс не знает, что делать с такой вот информацией и посылает очередной отлуп.. Собственно круг замкнулся и получился iq-флуд. :)

Индусы на Jabber.ru. Все гораздо опаснее

После того, как уперлись в ограничение на количество конференций, где можно сидеть одновременно, составил нечто типа рейтинга конференций, который определяет, сколько разных JID-ов побывало в конференции с 01.07.2008.

Для текущей структуры базы, такую информацию можно вытащить запросом:

select conferences.name, (select count(distinct jid) 
from conference_nicks
where conference_nicks.conference_id=conferences.id and lastaction > '2008-07-01') as cnt 
from conferences where autojoin=true and online=true and autoleave=true order by cnt;

Вот что вышло (больше — конференция популярнее)

 continue reading

Количество конференций per JID

mysql> select count(*) from conferences where online=1 and name like "%@conference.jabber.ru";
+----------+
| count(*) |
+----------+
|       51 |
+----------+
1 row in set (0.09 sec)

Все. Напоролся на ограничение в количество заджойненых конференций для одного JID-а на conference.jabber.ru.

В гугле ищут

Выборочно за неделю, судя по логам бота gluxi

 continue reading

Вот так появляются дыры в безопасности

Нашел у себя в коде

int RoleList::calc(const QString& role, const QString& affiliation)
{
        QString r=role.toUpper();
        QString a=affiliation.toUpper();
        if (a.startsWith("OWNER"))
                return(ROLE_OWNER);
        if (a.startsWith("ADMIN"))
                return(ROLE_ADMIN);
        if (r.startsWith("MODER"))
                return(ROLE_MODERATOR);
        if (a.startsWith("MEMBER"))
                return(ROLE_MEMBER);
        if (r.startsWith("PARTICIPANT"))
                return(ROLE_PARTICIPANT);
}

ССЗБ как говорится :)