The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Передача уведомлений используя Miranda (icq plugin)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: icq, plugin,  (найти похожие документы)
From: Сергей Копшаев <claric@mail.ru.> Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC) Subject: Передача уведомлений используя Miranda Оригинал: http://www.vadim.org.ua/index.php?cmd=article5 Задача. ------- У меня стоит Miranda IM 0.3.3 (http://www.miranda-im.org/) и есть к ней плагин NotifyAnithing (http://miranda-im.org/download/details.php?action=viewfile&id=431) Этот плагин слушает порт и отображает приходящие на него сообщения в popup окне. Есть Linux роутер с которого я хочу получать системные сообщения. Реализация. Клиент Miranda IM 0.3.3 с плагином NotifyAnithing. Уберите checkbox "Only Listen to Localhost Задайте порт, который NotifyAnithing будет слушать. С клиентом все. Сервер Используем стандартную систему syslog Кроме того, что syslogd пишет события в различные файлы типа /var/log/messages, передает на удаленные сервера логов и посылает почту указанным товарищам, syslogd может "бросать" сообщения в named pipe. Вот этой то возможностью передачи в named pipe мы и воспользуемся. 1. Создам named pipe с помощью утитлиты mkfifo: mkfifo /dev/mylogpipe 2. В файле конфигурации /etc/syslog.conf добавляем строчку: authpriv.* |/dev/mylogpipe Тем самым мы указываем сто все сообщения касающиеся пользовательских логинов направлять в named pipe /dev/mylogpipe. По всем вопросам о том какие события и как их записывать смотрите man syslog.conf. 3. Половина дела сделана, мы направили интересующие нас логи в named pipe. Осталось сделать демона, который бы все это читал, парсил и передавал нашему клиенту интересующие нас сообщения. 4. Вот простой скрипт на perl. 1. #!/usr/bin/perl 2. use IO::Socket; 3. if (!defined($child_pid = fork())) { 4. die "cannot fork: $!"; 5. } elsif ($child_pid) { exit;} 6. else { # I'm the child 7. } 8. open (FILEHANDLE, "/dev/mylogpipe"); 9. while () 10. { 11. $toim=readline(FILEHANDLE); 12. if ($toim=~/sshd|ftp|attack|error|NOQUEUE/) 13. { 14. my $sock = new IO::Socket::INET ( 15. PeerAddr => '192.1.1.2', 16. PeerPort => '5555', 17. Proto => 'udp', 18. ); 19. chomp($toim); 20. print $sock "!$toim"; 21. close($sock); 22. } 23. } 24. close(FILEHANDLE); 25. Описание скрипта. Строки 3-7 Это мы становимся независимым процессом, чтобы оторваться от консоли. Строки 8-9 открываем и читаем в цикле наш named pipe. Строки 11-12 типа парсим что нам смотреть, ибо если не фильтровать сообшения с загруженного роутера, то popup будут выглядеть в миранде очень забавно. Строки 14-18 создаем сокет где указываем на какой хост отправлять сообщения. Строка 20 отправляем сообщение. Строка 21 закрываем сокет и ждем нового совпадения с нашими фильтрами. Все ребята сидим и наблюдаем ситуацию

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру