Войти

Показать полную графическую версию : [решено] отправка сообщений в jabber из cmd или bat


RedX
11-01-2012, 11:53
Требуется отправлять сообщения из коммандной строки Windows на jabber (по протоколу XMPP)
В линуксе полно решений, и perl-скрипты и SendXMPP, а вот для Win32/Win64 подобного нет.
Перерыл кучу форумов, но не нашел даже аналогов

хотелось бы отправлять сообщения запуская программу с параметрами:
progr.exe %SERV %JID %PAS %RES %MESS
где
SERV - адрес jabber сервера
JID - логин отправителя, например: user@jabber.ru
PAS - пароль
RES - получатель, например: user1@jabber.ru
MESS - собственно само сообщение

в результат работы можно только отчет об ошибке подключения к серверу или несуществующего адреса получателя

____________________________
итог: если есть что-либо подобное под windows, подскажите , хотябы направление поиска
заранее благодарен

Anonymоus
11-01-2012, 13:56
RedX, сомневаюсь, что существует готовое решение, сам бы не отказался от такой программы. Вот что нашел: http://san-a.livejournal.com/39320.html, но оно требует сторонние компоненты.
Еще есть вот эта страничка в вики (http://wiki.jrudevels.org/Консольный_клиент), но те клиенты, что заявленные там, как кроссплатформенные, даже если и имеют текстовый или псевдографический интерфейс, отправлять сообщения непосредственно из командной строки не умеют.
Если у вас есть знакомый кодер на C, попросите написать такого рода консольный клиент (просто отправка, и опционально - приём сообщения) на основе вот этой библиотеки http://strophe.im/libstrophe/ , она себя хорошо зарекомендовала в различных jabber-ботах.

RedX
13-01-2012, 15:44
Друзья форумчане,
благодаря Delphi2009 и компоненте TJabbeClient мне удалось написать действующий образец утилиты делающий то, что мне нужно.

Утилиту назвал Send to Jabber.
синтаксис запуска:

send2jabber.exe sender@domain password server port reciver@domain "message"

расшифровка параметров:
sender@domain - JID отправителя
password - ну это и так понятно
server port - тоже, думаю не затруднит
reciver@domain -JID получателя сообщения
"message" - собственно само сообщение, обязательно заключать в кавычки

пока,что не проверки на правильность параметров и анализа ошибок соединения
поэтому приходится следить за правильностью ввода

вот собственно ссылка на файл и исходники
http://multi-up.com/628219

RedX
16-01-2012, 13:29
сегодня доработал немного,
теперь при проблемах протокола не вываливает кучей ошибок

-ограничено количество попыток подключиться к серверу jabber до 5
-при появлении ошибки подключения приложение закрывается без модальных окон сообщений


новая версия 1.0.1.1
http://multi-up.com/630022

sertrain
25-01-2012, 12:34
У меня стоит в сети ejabbred, отправляю сообщение появляется "send to jabber" пропадает, сообщение не приходит, в логах на сервере ничего плохого не пишет. Вижу подключение проходит и все.

ivanpost
23-03-2012, 16:41
Очень нужна подобная программа для оповещения о событии!!! Но данная версия почему то не работает

команда типа:
send2jabber.exe sender@jabber.ru password ssl.jabber.ru 443 receiver@jabber.ru "message"
в брэндмауэре разрешена...

в чем еще может быть дело?

sertrain
26-03-2012, 08:19
У меня заработала только с openfire

Anonymоus
26-03-2012, 12:45
Оставлю тут решение с интерпретатором ruby - статья на Habrahabr (http://habrahabr.ru/post/137505/)
Из минусов могу отметить - и отправитель, и получатель должны быть на одном сервере, задержка перед отправкой иногда до 10 секунд составляет. Из плюсов - в отличии от выложенной здесь программы на дельфи, у меня заработало с серверами яндекса, google talk и jabber.ru

ivanpost
27-03-2012, 15:11
Оставлю тут решение с интерпретатором ruby - статья на Habrahabr »
К сожалению, наша программная подготовка в этом плане находится на низком уровне.
Соответственно, просто правка конфигурационного файла на jabber.ru или ya.ru не дает желаемого. Сообщения тоже не отправляются.

Вообще нам нужно отправлять сообщения только на один адрес. В этом смысле конфигурационный подходит. Но сообщение то почему в нем?

Хорошо было бы так: xmpp_sender.exe "довольно длинное сообщение - 3 строки"

Anonymоus
27-03-2012, 16:37
ivanpost, конфигфайл - это профиль со значениями "по умолчанию". там можно держать те параметры, которые не будут изменяться при каждом вызове. К примеру, у меня он выглядит так:

xmpp_sender:
server: 2ch.so
login: jabber.bot
password: *пароль*
to: inquisitor
subject: Wipe-detector
body:

Как видите, body в данном случае не имеет значения. Всё, что мне нужно - вызвать из скрипта что-то вида
xmpp_sender -b "Текст сообщения"
Имейте в виду, для того, чтобы использовать кирилицу в сообщении, нужно сохранять скрипт в UTF-8. Как делать перевод строки - я не в курсе, да мне это не особо и нужно-то было.

ameelien
23-07-2013, 14:10
Камрады, тема на хабре была удалена, и теперь не понятно где раздобыть то что там было.

Iska
23-07-2013, 14:39
Камрады, тема на хабре была удалена, »
Создание EXE файла из ruby скрипта при помощи ocra на примере утилиты командной строки, посылающей XMPP (Jabber) уведомления / Хабрахабр (http://wayback.archive.org/web/20120317213337/http://habrahabr.ru/post/137505/)

и теперь не понятно где раздобыть то что там было. »
Достаём потерянные статьи из сетевых хранилищ / Хабрахабр (http://habrahabr.ru/post/146200/) :lol:

Anonymоus
24-07-2013, 10:03
ameelien, как и обещал, выкладываю для вас то, что использую сейчас сам. Это откомпилированный в exe широко известный perl-скрипт sendxmpp (http://sendxmpp.hostname.sk/). Никаких зависимостей или наличия перла не требует, всё включено в сам бинарник. Я делал его под x64, но если очень нужно, могу на виртуалке под x86 сделать. Проверено на Win7 и Win 2008 r2.
Простейший пример использования:
Echo This is simple test message|sendxmpp -t -s "Test message" -u "login" -p "password" -j "jabber.ru" applejack@neko.im
Обратите внимание, адресатов может быть сколько угодно, просто перечислите их в конце. Более подробно прочитать про синтаксис sendxmpp можно здесь (http://manpages.ubuntu.com/manpages/precise/man1/sendxmpp.1.html).
Скачать (x64) (http://188.40.78.19/uploads/sendxmpp.exe) (3,9 мб)

UPD: По просьбе пользователя RadinOFF (http://forum.oszone.net/member.php?userid=447408) добавил версию под 32-битную систему.
Скачать (x86) (http://188.40.78.19/uploads/sendxmpp32.exe) (3,2 мб)

ameelien
24-07-2013, 13:03
Действительно пашет. Правда понимает только UTF-8.

ameelien
24-07-2013, 15:07
PS: Для тех кто не в курсе по ключам к этой утилите - под катом есть основные и дополнительные:

--no-tls-verify
--tls-ca-path
-f,--file <file> use <file> configuration file instead of ~/.sendxmpprc
-u,--username <user> use <user> instead of the one in the configuration file
-p,--password <password> use <password> instead of the one in the configuration file
-j,--jserver <server> use jabber server <server> instead of the one in the configuration file. Note that you can add :<port> to use a non-default port, ie. -j myjabber.org:1234
-r,--resource <res> use resource <res> for the sender [default: 'sendxmpp']; when sending to a chatroom, this determines the 'alias'
-t,--tls connect securely, using TLS
-c,--chatroom send the message to a chatroom
-s,--subject <subject> set the subject for the message to <subject> [default: '']; when sending to a chatroom, this will set the subject for the chatroom
-m,--message <message> read the message from <message> (a file) instead of stdin
-i,--interactive work in interactive mode, reading lines from stdin and sending the one-at-time
-v,--verbose give verbose output about what is happening
-h,--help,--usage show a 'Usage' message
-d,--debug show debugging info while running. WARNING: This will include passwords etc. so be careful with the output!

По ссылкам подробнее все.
http://pwet.fr/man/linux/commandes/sendxmpp
http://sendxmpp.hostname.sk/

---------------------------------------------------------------------------------------------



По теме:
Я не могу победить его снова.
Я использую яндекс почта для домена. ( https://pdd.yandex.ru/ )
Пишу команду:
echo blabla | sendxmpp.exe -u "admin@2xxx.ru" -p "werwerwe23" -j "xmpp.yandex.ru:5222" bla-bla@jabber.ru (bla-bla@jabber.ru@jabber.ru)

и получаю отбой...

Сould not connect to 'xmpp.yandex.ru' on port 5222:
или
Сould not connect to 'domain-xmpp.ya.ru' on port 5222:

Джаббер клиент обычный нормально при этом авторизуется.
Помню, что есть особенность, с ненадобностью включения SASL аутефикации.



http://help.yandex.ru/pdd/chat.xml



Вот лог отладки:


XML::Stream: new: hostname = (Windows)
XML::Stream: SetCallBacks: tag(node) func(CODE(0x3ed38))
XMPP::Conn: xmppCallbackInit: start
XMPP::Conn: SetCallBacks: tag(message) func(CODE(0x3ed58))
XMPP::Conn: SetCallBacks: tag(presence) func(CODE(0x3edb288))
XMPP::Conn: SetCallBacks: tag(iq) func(CODE(0x3edbd10))
XMPP::Conn: SetPresenceCallBacks: type(subscribe) func(CODE(0x3ed70))
XMPP::Conn: SetPresenceCallBacks: type(subscribed) func(CODE(0x3e378))
XMPP::Conn: SetPresenceCallBacks: type(unsubscribe) func(CODE(0x3e150))
XMPP::Conn: SetPresenceCallBacks: type(unsubscribed) func(CODE(0x3edb390))
XMPP::Conn: SetDirectXPathCallBacks: xpath(/[@xmlns="urn:ietf:params:xml:ns:xmpp-tls"]) func(CODE(0x3ed28))
XMPP::Conn: SetDirectXPathCallBacks: xpath(/[@xmlns="urn:ietf:params:xml:ns:xmpp-sasl"]) func(CODE(0x3ed80))
XMPP::Conn: xmppCallbackInit: stop
sendxmpp: ssl_verify: 0
sendxmpp: tls_ca_path:
XMPP::Conn: Connect: host(xmpp.yandex.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' xm
lns='jabber:client' to='xmpp.yandex.ru' from='same' xml:lang='en' >)
XML::Stream: Read: buff(<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org
/streams' id='7593108' from='ya.ru' xml:lang='en'><stream:error><host-unknown xmlns='urn:ietf:params:xml:ns:xmpp-strea
ms'/></stream:error></stream:stream>)
XML::Stream: _handle_root: sid(newconnection) sax(XML::Stream::Parser=HASH(0x3edccc0)) tag(stream:stream) att( xmlns:str
eam http://etherx.jabber.org/streams xmlns jabber:client from ya.ru id 7593108 xml:lang en )
XML::Stream: Node: _handle_element: sid(newconnection) sax(XML::Stream::Parser=HASH(0x3edccc0)) tag(stream:error) att( )

XML::Stream: Node: _handle_element: check( -1 )
XML::Stream: Node: _handle_element: sid(newconnection) sax(XML::Stream::Parser=HASH(0x3edccc0)) tag(host-unknown) att( x
mlns urn:ietf:params:xml:ns:xmpp-streams )
XML::Stream: Node: _handle_element: check( 0 )
XML::Stream: Node: _handle_close: sid(newconnection) sax(XML::Stream::Parser=HASH(0x3edccc0)) tag(host-unknown)
XML::Stream: Node: _handle_close: check( 1 )
XML::Stream: Node: _handle_close: check2( 0 )
XML::Stream: Node: _handle_close: sid(newconnection) sax(XML::Stream::Parser=HASH(0x3edccc0)) tag(stream:error)
XML::Stream: Node: _handle_close: check( 0 )
XML::Stream: Node: _handle_close: check2( -1 )
XML::Stream: Node: _handle_close: sid(newconnection) sax(XML::Stream::Parser=HASH(0x3edccc0)) tag(stream:stream)
XML::Stream: Node: _handle_close: check( -1 )
XML::Stream: Node: _handle_close: rootTag(stream:stream) tag(stream:stream)
Could not connect to 'xmpp.yandex.ru' on port 5222:

stano4nik
04-09-2016, 20:49
ameelien, победили проблему?

mwz
04-09-2016, 23:04
stano4nik,
Имя пользователя: ameelien
Последняя активность: 10-09-2014 18:06




© OSzone.net 2001-2012