LINUX.ORG.RU

Jabber - sendxmpp не отправляются сообщения

 ,


0

1

Добрый день.

*** CentOS ***

1. Установил пакет: sendxmpp
2. Зарегал аккаунт login@xmpp.ru на https://jabber.ru

Из терминала:

# и так
echo «Hello world» | sendxmpp -u login@xmpp.ru -p password login@jabber.ru
# и так
echo «Hello world» | sendxmpp -t -u login@xmpp.ru -p password login@jabber.ru
# и так
echo «Hello world» | sendxmpp -j xmpp.ru:5222 -u login@xmpp.ru -p password login@jabber.ru
# и так
echo «Hello world» | sendxmpp -t -j xmpp.ru:5222 -u login@xmpp.ru -p password login@jabber.ru
Результат:
Error 'AuthSend': error: not-authorized[?]

Что я делаю не так?

-v

sendxmpp: ssl_verify: 1
sendxmpp: tls_ca_path:
sendxmpp: enabling SRV lookups
sendxmpp: Connect: 1
Error 'AuthSend': error: not-authorized[?]

Отключить ssl-авторизацию?

Nezhnayka28
() автор топика
Ответ на: комментарий от Nezhnayka28
perl 5.10.1

в /usr/share/perl5/Net/XMPP/Protocol.pm, строки:

#   if($self->{STREAM}->GetStreamFeature($self->GetStreamID(),«xmpp-sasl»))
#   {
#        return $self->AuthSASL(%args);
#   }
закомментированы. Результат:
sendxmpp: ssl_verify: 1
sendxmpp: tls_ca_path:
sendxmpp: enabling SRV lookups
sendxmpp: Connect: 1
Error 'AuthSend': 503: [?]
Вопрос открыт. Или может посоветуете что-то другое для отправки публичных сообщений в jabber на CentOS?

Nezhnayka28
() автор топика

ключ -d добавь, может в дебаге что то видно будет

JB ★★★★★
()
Ответ на: комментарий от YAR

Не вижу варианта -u login -j xmpp.ru

все варианты уже перепробовал, без изменений.

ключ -d добавь, может в дебаге что то видно будет

# echo «Hello world» | sendxmpp -d -u login@xmpp.ru -p password login@jabber.ru     
     
XML::Stream: new: hostname = (my-host.ru)
XML::Stream: SetCallBacks: tag(node) func(CODE(0x2d756f0))
XMPP::Conn: xmppCallbackInit: start
XMPP::Conn: SetCallBacks: tag(message) func(CODE(0x2d922f8))
XMPP::Conn: SetCallBacks: tag(presence) func(CODE(0x2d7aa98))
XMPP::Conn: SetCallBacks: tag(iq) func(CODE(0x2d7a948))
XMPP::Conn: SetPresenceCallBacks: type(subscribe) func(CODE(0x2d7a8e8))
XMPP::Conn: SetPresenceCallBacks: type(subscribed) func(CODE(0x2d7aca8))
XMPP::Conn: SetPresenceCallBacks: type(unsubscribe) func(CODE(0x2d750c0))
XMPP::Conn: SetPresenceCallBacks: type(unsubscribed) func(CODE(0x2d7ac48))
XMPP::Conn: SetDirectXPathCallBacks: xpath(/[@xmlns=«urn:ietf:params:xml:ns:xmpp-tls»]) func(CODE(0x2d75120))
XMPP::Conn: SetDirectXPathCallBacks: xpath(/[@xmlns=«urn:ietf:params:xml:ns:xmpp-sasl»]) func(CODE(0x2d7a5e8))
XMPP::Conn: xmppCallbackInit: stop
sendxmpp: ssl_verify: 1
sendxmpp: tls_ca_path:
sendxmpp: enabling SRV lookups
XMPP::Conn: Connect: host(xmpp.ru:5222) namespace(jabber:client)
XMPP::Conn: Connect: timeout(10)
XML::Stream: Connect: type(tcpip)
XML::Stream: Connect: Got a connection
XML::Stream: Send: (<?xml version='1.0'?><stream:stream version='1.0' xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' to='xmpp.ru' from='shopping-warehouse.ru' xml:lang='en' >)
XML::Stream: Read: buff(<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='2774209136' from='xmpp.ru' version='1.0' xml:lang='ru'>)
XML::Stream: Read: buff(<stream:features><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/><compression xmlns='http://jabber.org/features/compress'><method>zlib</method><... xmlns='p1:push'/><rebind xmlns='p1:rebind'/><ack xmlns='p1:ack'/><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>SCRAM-SHA-1</mechanism></mechanisms><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='S4v2n+rKmTsgLFog7BtVvK2o660='/><register xmlns='http://jabber.org/features/iq-register'/></stream:features>)
XMPP::Conn: Connect: connection made
XML::Stream: SetCallBacks: tag(node) func(CODE(0x2d86a98))
sendxmpp: Connect: 1
XMPP::Conn: AuthIQAuth: old school auth
XMPP::Conn: SendAndReceiveWithID: object(Net::XMPP::IQ=HASH(0x2d809c0))
XMPP::Conn: SendWithID: id(netjabber-0)
XMPP::Conn: SendWithID: in(<iq type='get'><query xmlns='jabber:iq:auth'><username>login@xmpp.ru</username></query></iq>)
XMPP::Conn: RegisterID: tag(iq) id(netjabber-0)
XMPP::Conn: SendWithID: out(<iq id='netjabber-0' type='get'><query xmlns='jabber:iq:auth'><username>login@xmpp.ru</username></query></iq>)
XMPP::Conn: SendXML: sent(<iq id='netjabber-0' type='get'><query xmlns='jabber:iq:auth'><username>login@xmpp.ru</username></query></iq>)
XML::Stream: Send: (<iq id='netjabber-0' type='get'><query xmlns='jabber:iq:auth'><username>login@xmpp.ru</username></query></iq>)
XMPP::Conn: SendAndReceiveWithID: sent with id(netjabber-0)
XMPP::Conn: WaitForID: id(netjabber-0)
XMPP::Conn: ReceivedID: id(netjabber-0)
XMPP::Conn: ReceivedID: nope...
XMPP::Conn: WaitForID: haven't gotten it yet... let's wait for more packets
XMPP::Conn: Process: timeout(1)
XML::Stream: Read: buff(<iq from='xmpp.ru' id='netjabber-0' type='error'><error code='503' type='cancel'><service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq>)
XMPP::Conn: CallBack: sid(2774209136) received(<iq from='xmpp.ru' id='netjabber-0' type='error'><error code='503' type='cancel'><service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq>)
XMPP::Conn: CallBack: tag(iq)
XMPP::Conn: CallBack: id(netjabber-0)
XMPP::Conn: CallBack: we either want it or were waiting for it.
XMPP::Conn: CallBack: check directxpath
XMPP::Conn: CallBack: check directxpath(/[@xmlns=«urn:ietf:params:xml:ns:xmpp-sasl»])
XMPP::Conn: CallBack: check directxpath(/[@xmlns=«urn:ietf:params:xml:ns:xmpp-tls»])
XMPP::Conn: BuildObject: tag(iq) package(Net::XMPP::IQ)
XMPP::Conn: CheckID: tag(iq) id(netjabber-0)
XMPP::Conn: CheckID: we have that here somewhere...
XMPP::Conn: CallBack: found registry entry: tag(iq) id(netjabber-0)
XMPP::Conn: DeregisterID: tag(iq) id(netjabber-0)
XMPP::Conn: CallBack: they still want it... we still got it...
XMPP::Conn: GotID: id(netjabber-0) xml(<iq from='xmpp.ru' id='netjabber-0' type='error'><error code='503' type='cancel'><service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq>)
XMPP::Conn: ReceivedID: id(netjabber-0)
XMPP::Conn: ReceivedID: id(netjabber-0)
XMPP::Conn: WaitForID: we got it!
XMPP::Conn: GetID: id(netjabber-0)
XMPP::Conn: ReceivedID: id(netjabber-0)
XMPP::Conn: CleanID: id(netjabber-0)
Error 'AuthSend': 503: [?]
XML::Stream: Send: (</stream:stream>)
XML::Stream: SetCallBacks: tag(node) func(CODE(0x2d8b910))
XMPP::Conn: Disconnect: bye bye
sendxmpp: Disconnect
Nezhnayka28
() автор топика
Ответ на: комментарий от Nezhnayka28

хз, УМВР именно в таком виде и именно на jabber.ru

YAR ★★★★★
()
Последнее исправление: YAR (всего исправлений: 1)
Ответ на: комментарий от JB

это что то отвалилось у jabber.ru, с другими серверами все ок

а с какими именно все нормально? Потому что я и другие сервера подставлял в -j - все одно и то же.

хз, УМВР именно в таком виде и именно на jabber.ru

а какая версия perl? Вчера перерыл пол интернета, и у всех приблизительно одно и то же, на более старых версиях perl вроде работает, а на perl 5.10.1 - нет. Нашел даже такие случаи когда изначально работало, а после обновления начались вот такие проблемы.

Nezhnayka28
() автор топика
Ответ на: комментарий от Nezhnayka28

а с какими именно все нормально?

я на своем проверял

Потому что я и другие сервера подставлял в -j - все одно и то же.

а зарегистрироваться на этих других ты не забыл?

JB ★★★★★
()
Ответ на: комментарий от JB

а зарегистрироваться на этих других ты не забыл?

нет конечно, не забыл )) на sudouser.ru проверял с зареганным аккаунтом там.

Nezhnayka28
() автор топика
Ответ на: комментарий от Nezhnayka28

нет конечно, не забыл )) на sudouser.ru проверял с зареганным аккаунтом там.

echo «Hello world» | sendxmpp -j sudouser.ru -u login@sudouser.ru -p password login@jabber.ru
echo «Hello world» | sendxmpp -j sudouser.ru -u login -p password login@jabber.ru

тот-же результат

JB, YAR - а у вас версия perl какая?

Nezhnayka28
() автор топика
Ответ на: комментарий от JB
# perl --version

This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi

1. Зарегал еще один аккаунт jabber на jabbim.cz

2. Установил пакет: perl-Net-Jabber

3. Скачал еще один скрипт по отправке сообщений в jabber (назвал его notify_jabber)

use strict;
use Net::Jabber qw(Client) ;
use Net::Jabber qw(Message) ;
use Net::Jabber qw(Protocol) ;
use Net::Jabber qw(Presence) ;

my $len = scalar @ARGV;

if ($len ne 2) {
   die «Usage...\n notify [jabberid] [message]\n»;
}

my @field=split(/,/,$ARGV[0]);

use constant RECIPIENT => $ARGV[0];
use constant SERVER    => 'jabbim.cz';
use constant PORT      => 5222;
use constant USER      => 'login@jabbim.cz';
use constant PASSWORD  => 'password';
use constant RESOURCE  => 'Work';
use constant MESSAGE   => $ARGV[1];
use constant MAXWAIT   => 2 ;

my $connection = Net::Jabber::Client->new();
$connection->Connect( «hostname» => SERVER,«port» => PORT )  or die
«Cannot connect ($!)\n»;

my @result = $connection->AuthSend( «username» => USER,«password» =>
PASSWORD,«resource» => RESOURCE );
if ($result[0] ne «ok») {
 die «Ident/Auth with server failed: $result[0] - $result[1]\n»;
}

foreach ( @field ) {
   my $message = Net::Jabber::Message->new();
   $message->SetMessage( «to»           => $_,
                         «subject»      => «Notification»,
                         «type»         => «chat»,
                         «body»         => MESSAGE);

   $connection->Send($message);
   sleep(MAXWAIT);
}
$connection->Disconnect();
exit;

Раскомментировал строки в /usr/share/perl5/Net/XMPP/Protocol.pm:

if($self->{STREAM}->GetStreamFeature($self->GetStreamID(),«xmpp-sasl»))
{
        return $self->AuthSASL(%args);
}
Вызываю sendxmpp:
echo «Hello world» | sendxmpp -j jabbim.cz -u login@jabbim.cz -p password login@jabber.ru
echo «Hello world» | sendxmpp -j jabbim.cz -u login -p password login@jabber.ru
Результат:
Error 'AuthSend': error: not-authorized[?]
Вызываю notify_jabber:
./notify_jabber login@jabber.ru «Hello, world»
Результат:
Ident/Auth with server failed: error - not-authorized

Комментирую строки строки в /usr/share/perl5/Net/XMPP/Protocol.pm:

#   if($self->{STREAM}->GetStreamFeature($self->GetStreamID(),«xmpp-sasl»))
#   {
#        return $self->AuthSASL(%args);
#   }
Вызываю sendxmpp:
echo «Hello world» | sendxmpp -j jabbim.cz -u login@jabbim.cz -p password login@jabber.ru
echo «Hello world» | sendxmpp -j jabbim.cz -u login -p password login@jabber.ru
Результат:
Error 'AuthSend': 503: [?]
Вызываю notify_jabber:
./notify_jabber login@jabber.ru «Hello, world»
Результат:
Ident/Auth with server failed: 503 -

Nezhnayka28
() автор топика
Ответ на: комментарий от YAR

Может все же стоит разобраться чего не работает этот вариант?

Я не знаю куда дальше копать, по всей видимости причина в perl-е, но что ему не хватает, не знаю. Попробовал произвести на другом сервере с CentOS тоже самое - такая-же ситуация.

Nezhnayka28
() автор топика
Ответ на: комментарий от Nezhnayka28

Я пользуюсь для таких целей скриптом jsend из TclXMPP. Правда, как устанавливать его зависимости в CentOS, не знаю. В Debian или Ubuntu было бы так:

sudo apt-get install tcllib tcl-tls
sudo apt-get install fossil
fossil clone https://chiselapp.com/user/sgolovan/repository/tclxmpp tclxmpp.fossil
mkdir tclxmpp
cd tclxmpp
fossil open ../tclxmpp.fossil

А дальше либо установить:

sudo make install
jsend -help
man jsend
echo 'Hello world!' | jsend login@jabber.ru -from login@xmpp.ru -password password

либо прямо отсюда:

TCLLIBPATH=. ./examples/jsend.tcl -help
TCLLIBPATH=. ./examples/jsend.tcl login@jabber.ru -from login@xmpp.ru -password password -body 'Hello World!'
TeopeTuK ★★★★
()
Ответ на: комментарий от TeopeTuK

Я пользуюсь для таких целей скриптом jsend из TclXMPP.

А можешь сам код скрипта ./examples/jsend.tcl показать? Боюсь что он так-же будет завязан на perl, что повлечет за собой все те же проблемы, как и предыдущих двух скриптах.

Nezhnayka28
() автор топика
Ответ на: комментарий от Nezhnayka28

Я остановился на таком варианте на Python.

#!/usr/bin/env python
 #-*- coding: utf-8 -*-

 import xmpp,sys

 xmpp_jid = 'me@jabber.server'
 xmpp_pwd = 'hackme'

 to = sys.argv[1]
 msg = sys.argv[2]

 jid = xmpp.protocol.JID(xmpp_jid)
 client = xmpp.Client(jid.getDomain(),debug=[])
 client.connect()
 client.auth(jid.getNode(),str(xmpp_pwd),resource='xmpppy')
 client.send(xmpp.protocol.Message(to,msg))
 client.disconnect()
swarnk ★★
()
Ответ на: комментарий от swarnk

Я остановился на таком варианте на Python.

Супер, хоть и самый простой и коротенький скрипт, но работает! Большое спасибо.

Nezhnayka28
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.