Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Мелочи —> SendXMPP

SendXMPP

Автор: Cancer.


SendXMPP является Perl-скриптом для отправки сообщений на XMPP (Jabber), похоже на то, что mail делает для работы с почтой.

sendxmpp используется на компьютерах во всем мире, например, для отправки сообщения на xmpp сервер для предупреждения или уведомления пользователей.



Установка SendXMPP



Идем в порты
//> cd /usr/ports

Ищем прогу
/usr/ports/> make search name=sendxmpp

Port:   sendxmpp-0.0.8
Path:   /usr/ports/net-im/sendxmpp
Info:   Perl-script to send xmpp (jabber) messages
Maint:  mek@mek.uz.ua
B-deps: expat-2.0.1 p5-Authen-SASL-2.12 p5-Digest-HMAC-1.01 p5-Digest-SHA1-2.11
p5-ExtUtils-CBuilder-0.24 p5-ExtUtils-ParseXS-2.19 p5-GSSAPI-0.26
p5-Module-Build-0.30 p5-Net-XMPP-1.02 p5-Spiffy-0.30 p5-Test-Base-0.54_1
p5-Unicode-String-2.09 p5-XML-Parser-2.36 p5-XML-Stream-1.22 p5-YAML-0.66
perl-5.8.8_1
R-deps: expat-2.0.1 p5-Authen-SASL-2.12 p5-Digest-HMAC-1.01 p5-Digest-SHA1-2.11
p5-ExtUtils-CBuilder-0.24 p5-ExtUtils-ParseXS-2.19 p5-GSSAPI-0.26perl-5.8.8_1
p5-Module-Build-0.30 p5-Net-XMPP-1.02 p5-Spiffy-0.30 p5-Test-Base-0.54_1
p5-Unicode-String-2.09 p5-XML-Parser-2.36 p5-XML-Stream-1.22 p5-YAML-0.66
WWW:    http://www.djcbsoftware.nl/code/sendxmpp/


Переходим в директорию
//> cd /usr/ports/net-im/sendxmpp

И начинаем устанавливать
/usr/ports/net-im/sendxmpp/> make install clean

Далее попросит
     +--------------------------------------------------------------------+
     |                   Options for p5-Authen-SASL 2.12                  |
     | +----------------------------------------------------------------+ |
     | |  [X] KERBEROS  Enable Kerberos support                         | |
     | |                                                                | |
     | |                                                                | |
     | |                                                                | |
     | |                                                                | |
     +-+------v(+)------------------------------------------------------+-+
     |                       [  OK  ]       Cancel                        |
     +--------------------------------------------------------------------+

/usr/ports/net-im/sendxmpp/> rehash



Настройка SendXMPP



Создаем файл под которым sendxmpp будет подключаться к Джаббер Серверу в моем случае это Джаббер сервер Openfire
//> ee /root/.sendxmpprc

Содержимое файла должно быть примерно такое
user@jabber.domain.ru:5222 Пароль


Даем такие права на файл
//> chmod 0600 /root/.sendxmpprc


Далее правим вот этот файл закомментировав строку return $self->AuthSASL(%args);
так как с ней у меня не проходила авторизация на Джаббер сервере
//> ee /usr/local/lib/perl5/site_perl/5.8.8/Net/XMPP/Protocol.pm

И комментим строку
#        return $self->AuthSASL(%args);



Далее правим сам демон для того что бы сообщения могли нормально отправляться на русском языке
//> ee /usr/local/bin/sendxmpp

Правим файл добавив в него параметр use encoding 'koi8-r'; Нужен он для того что бы мы молги отправлять на сервер сообщения на Русском языке
....пропущено....
use Net::XMPP;
use Getopt::Long;
use strict;
use encoding 'koi8-r';
....пропущено....


Проверка работы



Проверить можно вот так, можно просмотреть в режиме дебага ключ -d
//> echo "Текст сообщения" | sendxmpp -d -s "Тема сообщения" cancer@jabber.domain.ru

И долны увидеть
sendxmpp: config: 'password' => 'Пароль'
sendxmpp: config: 'jserver' => 'jabber.domain.ru'
sendxmpp: config: 'port' => '5222'
sendxmpp: config: 'username' => 'user'
XML::Stream: new: hostname = (bsd.domain.local)

.....пропущено.....

XML::Stream: Send: (</stream:stream>)
XML::Stream: SetCallBacks: tag(node) func(CODE(0x86304e4))
XMPP::Conn: Disconnect: bye bye
sendxmpp: Disconnect


Если получили сообщение от пользователя которого указали в /root/.sendxmpprc
Subject: Тема сообщения

Текст сообщения

Значит все работает нормально!!!!





Вот написал скрипт для связки Squid+Sams & Havp. Если Havp найдет вирус, то мне отправит сообщение, скрипт нужно запускать каждый час (по крону), если не будет обнаружено Вируса естественно никакого сообщения не будет.
#!/bin/sh
# Made by Cancer 21/03/09

logfile='/var/log/havp/access.log'
logfile2="/usr/home/havp.log"
logfile3="/usr/home/havp2.log"
time=`/bin/date -v -1H "+%d/%m/%Y %H"`
subject="Был обнаружен Вирус!!!!!"
message="/usr/home/message"
alert="/usr/home/havp2.log"
sendxmpp="/usr/local/bin/sendxmpp"

cat $logfile | grep "$time" > $logfile2
if
cat $logfile2 | grep "VIRUS ClamAV" > $logfile3
then
cat $message $alert | $sendxmpp -s "$subject" cancer@jabber.domain.ru
fi

Создаем файл
//> ee /usr/home/message

Вот с таким содержанием
Программой ClamAV за прошедший час был обнаружен Вирус!
Ниже приводится лог что за вирус и с какого IP адреса
===============================================



Вот такое сообщение вы получите в своем Джаббер клиенте
Subject: Был обнаружен Вирус!!!!!

Программой ClamAV за прошедший час был обнаружен Вирус!
Ниже приводится лог что за вирус и с какого IP адреса
===============================================

21/03/2009 19:42:37 192.168.xx.x GET 200 http://www.eicar.org/download/eicar.com
375+68 VIRUS ClamAV: Eicar-Test-Signature





P.S огромное спасибо конфе freebsd@conference.jabber.ru за помощь в написании скрипта



размещено: 2009-05-22,
последнее обновление: 2009-05-22,
автор: Cancer


desruptor, 2009-05-22 в 11:07:53

Эмн, там все таки mail используется как название программы, а потому лучше оставить без перевода

Cancer, 2009-05-22 в 11:22:44

Поправил!

Elight, 2009-05-22 в 17:14:41

Имхо, использовать KOI8-R вместо "кошерной" UTF-8 - некрасиво. Лучше было бы прикрутить iconv в командной строке.

И править текст перлового модуля - тоже мне не улыбается. Ибо костыль. В jabberd2 работает и без него, а в Openfire надо поэкспериментировать.

lissyara, 2009-06-18 в 17:57:07

А с openfire поделие не работает.
И с 2004 года это никак не пофиксят =)))

Cancer, 2009-06-18 в 18:28:19

Скорее всего кастрировать перл прийдется =) или фиксить sendxmpp.....

Luser, 2009-08-12 в 20:40:54

На 7.2 работает без:
#        return $self->AuthSASL(%args);

Luser, 2009-11-30 в 15:57:38

ejabberd переехал с убунту на 7.2, перестала работать авторизация: Error 'AuthSend': 503: [?], sendxmpp как был так и остался на фряхе
колдоство с
#        return $self->AuthSASL(%args);
не помогает

denzill, 2009-12-14 в 19:32:00

отлично работает с openfire!
и комментить ничего не надо

Rostov114, 2010-03-08 в 23:47:05

Ejabberd. После комментирования не хотел подключаться.
Удалил комментарий, в миг пришло сообщение.
Спасибо за статью.

P.S. Perl 5.8.9



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0473 секунд
Из них PHP: 29%; SQL: 71%; Число SQL-запросов: 86 шт.
Исходный размер: 32875; Сжатая: 7078