Консольный клиент Jabber

Обсуждаем OS FreeBSD и сервисы на ней.

Консольный клиент Jabber

Сообщение Андрей » 31 мар 2009, 14:47

Приветствую.
Раз уж зашло обсуждение статьи , то по совету Алексея решил создать форум.
Что я не пробовал - авторизация не проходит.
установил порт /usr/ports/security/p5-IO-Socket-SSL/
Пытаюсь выполнить
Код: Выделить всё
# echo "Hello" | /usr/local/bin/sendxmpp -t -u test@10.10.254.128 -p test -s testmessage admin@10.10.254.128


выводится сообщение:
Код: Выделить всё
Can't use an undefined value as a HASH reference at /usr/local/lib/perl5/site_perl/5.8.8/XML/Stream.pm line 1165.

Погуглил нашел это.
Закоментировал строки при повторной попытке подключения опять выдается эта же ошибка.

С данным логином и паролем при помощи Miranda-IM я запросто могу авторизоваться. Из консоли не хочет.
Если выполнить скрипт, указанный в самой статье, никакого вывода не происходит, сообщение в клиента не присылается.

Заранее всем благодарен, кто поможет решить эту проблему.

ЗЫ. Jabber-сервер основан на WildFire, скрипт запускаю с этого же сервера.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: Консольный клиент Jabber

Сообщение lehisnoe » 31 мар 2009, 18:46

Специально сейчас сделал все то, что было описано в статье, на "нулёвой" машине. Действительно, до тех пор, пока есть зареганный JID на сервере, при попытке отослать что-то с этого же JID'a, выдавалась ошибка: not-authorized. Добывал ошибку так:
Код: Выделить всё
#!/usr/bin/perl
use Net::XMPP;
my $con=new Net::XMPP::Client(debuglevel=>1,debugfile=>"/var/log/xmpp.log",debugtime=>1);
$con->Connect(hostname=>'jabber.ru',port=>5222);
@res=$con->AuthSend(username=>'username',password=>'password',resource=>"BSDConsole");
if ($res[0] ne "error"){
           my $msg=new Net::XMPP::Message();
           $msg->SetMessage(to=>'jid@jabber.org',from=>'username@jabber.ru',body=>"My First Jabber Message From FreeBSD");
           $con->Send($msg);
}else{
           print "\n================\n[".$res[1]."]\n================\n";
}
$con->Disconnect();

Соотв, в файле /var/log/xmpp.log будет дебаг подключения.

Если username@jabber.ru находится в оффе, то все замечательно шлется.
No users
No troubles
No money
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
lehisnoe
Site Admin
 
Сообщения: 539
Зарегистрирован: 11 июн 2008, 14:09
Откуда: Moscow

Re: Консольный клиент Jabber

Сообщение root » 31 мар 2009, 18:53

1. покажи вывод:
Код: Выделить всё
pkg_info | grep p5-


2.
Comment the following lines out of /usr/share/perl5/Net/XMPP/Protocol.pm and you should be good to go:

# if($self->{STREAM}->GetStreamFeature($self->GetStreamID(),"xmpp-sasl"))
# {
# return $self->AuthSASL(%args);
# }

это строчки 1807, 1808, 1809, 1810

3. ты коментил в
Код: Выделить всё
/usr/share/perl5/Net/XMPP/Protocol.pm
или все же в
Код: Выделить всё
/usr/local/lib/perl5/site_perl/5.8.8/Net/XMPP/Protocol.pm
?

4. у тя перл 5.8.8, а на самом деле perl 5.8.9 уже давно есть
Код: Выделить всё
perl-5.8.9_2        Practical Extraction and Report Language

м.б. все же стоит обновить сам перл и перловые модули ?
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Консольный клиент Jabber

Сообщение Андрей » 01 апр 2009, 06:18

Код: Выделить всё
[b]# pkg_info | grep p5-[/b]
p5-Authen-SASL-2.12 Perl5 module for SASL authentication
p5-Config-IniFiles-2.47 Perl5 module for reading .ini-style configuration files
p5-Crypt-CBC-2.30   Perl5 interface to Cipher Block Chaining with DES and IDEA
p5-Crypt-DES-2.05   Perl5 interface to DES block cipher
p5-Digest-HMAC-1.01 Perl5 interface to HMAC Message-Digest Algorithms
p5-Digest-SHA1-2.11 Perl interface to the SHA-1 Algorithm
p5-ExtUtils-CBuilder-0.24 Compile and link C code for Perl modules
p5-ExtUtils-ParseXS-2.19 Converts Perl XS code into C code
p5-IO-Socket-SSL-1.23 Perl5 interface to SSL sockets
p5-MIME-Base64-3.07 Perl5 module for Base64 and Quoted-Printable encodings
p5-Module-Build-0.32 Build and install Perl modules
p5-Net-SNMP-5.2.0   A perl module for SNMP... Net::SNMP
p5-Net-SSLeay-1.35_1 Perl5 interface to SSL
p5-Net-XMPP-1.02    Net::XMPP provides Perl Developer access to the XMPP protoc
p5-Pod-Parser-1.38  Modules to work with POD (Plain Old Documentation)
p5-SNMP_Session-1.12 A perl5 module providing rudimentary access to SNMPv1 and v
p5-Unicode-String-2.09 These are experimental Perl5 modules to handle various Unic
p5-XML-Parser-2.36  Perl extension interface to James Clark's XML parser, expat
p5-XML-Stream-1.22  XML::Stream provides you with access to XML Stream
p5-YAML-0.68        YAML implementation in Perl
p5-gettext-1.05_1   Message handling functions
php5-5.2.5          PHP Scripting Language
php5-bz2-5.2.9      The bz2 shared extension for php
php5-ctype-5.2.9    The ctype shared extension for php
php5-gd-5.2.9       The gd shared extension for php
php5-mbstring-5.2.9 The mbstring shared extension for php
php5-mcrypt-5.2.9   The mcrypt shared extension for php
php5-mysql-5.2.9    The mysql shared extension for php
php5-openssl-5.2.9  The openssl shared extension for php
php5-pcre-5.2.9     The pcre shared extension for php
php5-session-5.2.9  The session shared extension for php
php5-simplexml-5.2.9 The simplexml shared extension for php
php5-sockets-5.2.9  The sockets shared extension for php
php5-spl-5.2.9      The spl shared extension for php
php5-xml-5.2.9      The xml shared extension for php
php5-zlib-5.2.9     The zlib shared extension for php


Коментил строки в:
Код: Выделить всё
/usr/local/lib/perl5/site_perl/5.8.8/Net/XMPP/Protocol.pm

т.к. в /usr/share/ lbhf perl5 не существует.

. у тя перл 5.8.8, а на самом деле perl 5.8.9 уже давно есть

Ну вроде скрипт писался и под более старую версию.


Как бы странно не звучало, но скрипт Алексея заработал.

А возможно ли этот скрипт для отправки сообщений, по мере появления записи в файле?
как например это возможно с sendxmpp:
Код: Выделить всё
tail -f /var/log/syslog | sendxmpp -i kto-to@jabber.ru

Это естественно будет работать если в ~/.sendxmpprc прописаны логин и пароль и установлен chmod 600.

Добавил позже:
Открыл ман (man sendxmpp), почитал. Выполнил такую комманду:
Код: Выделить всё
# sendxmpp -u yourserver -p shatrik -j 10.10.254.128:5222 -r home -s Hello -m Privet -d admin@10.10.254.128


Мне вывелся дебаг, в котором иностранным по черному было написано:
Код: Выделить всё
.....
XMPP::Conn: WaitForID: we got it!
XMPP::Conn: GetID: id(netjabber-1)
XMPP::Conn: ReceivedID: id(netjabber-1)
XMPP::Conn: CleanID: id(netjabber-1)
XMPP::Conn: AuthIQAuth: we authed!
sendxmpp: AuthSend: ok

Я конечно понимаю, что я авторизовался, но последующего вывода в клиента самого admin не последовало.

Попробовал раскоментировать 1807, 1808, 1809, 1810 строки в /usr/local/lib/perl/site_perl/5.8.8/Net/XMPP/Protocol.pm
Выполнил ту же команду и получил:
Код: Выделить всё
....
XML::Stream: Node: _handle_close: check( 0 )
XML::Stream: Node: _handle_close: check2( -1 )
XML::Stream: Process: block(0)
XMPP::Conn: AuthSASL: Authentication failed.
Error 'AuthSend': error: not-authorized[?]
XML::Stream: Send: (</stream:stream>)
XML::Stream: SetCallBacks: tag(node) func(CODE(0x8634864))
XMPP::Conn: Disconnect: bye bye
sendxmpp: Disconnect



если выполнить команду как:
Код: Выделить всё
# sendxmpp -u yourserver@10.10.254.128 -p shatrik -j 10.10.254.128:5222 -r home -s Hello -m Privet -d admin@10.10.254.128

то получу такой вывод:
Код: Выделить всё
....
XMPP::Conn: GotID: id(netjabber-1) xml(<iq id='netjabber-1' to='10.10.254.128/44c6cfe6' type='error'><error code='401' type='auth'><not-authorized xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error><query xmlns='jabber:iq:auth'><digest>c68446c1348bb2899ab50a5e0ef81bcce64a5a47</digest><resource>home</resource><username>yourserver@10.10.254.128:5222</username></query></iq>)
XML::Stream: Process: block(0)
XMPP::Conn: ReceivedID: id(netjabber-1)
XMPP::Conn: ReceivedID: id(netjabber-1)
XMPP::Conn: WaitForID: we got it!
XMPP::Conn: GetID: id(netjabber-1)
XMPP::Conn: ReceivedID: id(netjabber-1)
XMPP::Conn: CleanID: id(netjabber-1)
Error 'AuthSend': 401: [?]
XML::Stream: Send: (</stream:stream>)
XML::Stream: SetCallBacks: tag(node) func(CODE(0x862bfdc))
XMPP::Conn: Disconnect: bye bye
sendxmpp: Disconnect

в чем дело, я так и не понял.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: Консольный клиент Jabber

Сообщение Андрей » 01 апр 2009, 11:15

Немного покопавшись и по изменяв ряд настроек - отослал сообщение через sendxmpp:
Код: Выделить всё
# echo hello | sendxmpp -u test -p test -j 10.10.254.128:5222 -r home -v -d admin@10.10.254.128

Проблема теперь в том, что tail -h /путь/до/файла не хочет показывать. Что не очень хорошо.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область


Вернуться в FreeBSD

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29