Ohlášení stroje přes XMPP

beer

  • *****
  • 729
    • Zobrazit profil
Ohlášení stroje přes XMPP
« kdy: 16. 07. 2012, 12:21:39 »
Ahoj, jak udělat, aby PC, který se zapne, odeslal na gmail přes smtp nebo google talk přes XMPP zprávu, že je online a že má případně následující IP adresu, a při vypínání aby zaslal zprávu, že se vypíná? Na stroji je ubuntu 12.04.

Co přesně kde nakonfigurovat? Jak by to mohlo vypadat?
« Poslední změna: 16. 07. 2012, 13:33:06 od Petr Krčmář »


Re:Ohlášení stroje přes XMPP
« Odpověď #1 kdy: 16. 07. 2012, 13:34:03 »
A musí to být přes XMPP? Existuje řada služeb poskytujících DNS záznam, který se nastaví ve chvíli, kdy je z nějaké adresy stažen konkrétní soubor ze serveru.

invader

Re:Ohlášení stroje přes XMPP
« Odpověď #2 kdy: 16. 07. 2012, 13:44:04 »
Zkus treba tenhle perl skript (jen zajistit ze se spusti po startu+predat mu aktualni IP pc a to ostatni co chces...).

http://www.mail-archive.com/nagios-users@lists.sourceforge.net/msg01616.html

beer

  • *****
  • 729
    • Zobrazit profil
Re:Ohlášení stroje přes XMPP
« Odpověď #3 kdy: 16. 07. 2012, 13:55:57 »
A musí to být přes XMPP? Existuje řada služeb poskytujících DNS záznam, který se nastaví ve chvíli, kdy je z nějaké adresy stažen konkrétní soubor ze serveru.

PC, které se má ohlašovat, nemá veřejnou IP adresu, běží tam n2n a ssh. Já k němu (respektive i k ostatním) přistupuji přes n2n a ssh, server z venčí je neuvidí. Je jich několik a já mám více n2n sítí, musím vždy zkoušet, jestli je některý online, či nikoliv.

beer

  • *****
  • 729
    • Zobrazit profil
Re:Ohlášení stroje přes XMPP
« Odpověď #4 kdy: 16. 07. 2012, 14:30:59 »
Zkus treba tenhle perl skript (jen zajistit ze se spusti po startu+predat mu aktualni IP pc a to ostatni co chces...).

http://www.mail-archive.com/nagios-users@lists.sourceforge.net/msg01616.html

Díky, to by možná šlo, ty IP adresy by se neměnily, takže by mi stačilo jí tam ručně vložit do textu zprávy.


Kód: [Vybrat]
Frederik #!/usr/bin/perl # # Author David Cox # Created from various code examples found on the web # Last Modified 2006-01-19 # History # HTML-changes based on 08/06/2002 # adapted d.d. 2006-01-19 by Dieter Demerre to allow html encoded messages # # Feel free to use or modify as needed to suit your needs ####################################################### # MAXWAIT is used because the send message function didn't seem to # like being called too fast. The message would be sent unless I waited a second # or so. You can experiment with it but I just went with 2 seconds. ####################################################### use strict; use Net::Jabber qw(Client) ; use Net::Jabber qw(Message) ; use Net::Jabber qw(Protocol) ; use Net::Jabber qw(Presence) ; use HTML::Parse ; require HTML::FormatText; my $len = scalar @ARGV; my $htmlmessage = my $mymessage = ""; if ((2 ne $len) && (($len ne 3) || ($ARGV[1] ne "--html"))) { die "Usage...\n notify <jabberid>[,<jabberid>]* [--html] <message>\n"; } my @field=split(/,/,$ARGV[0]); use constant RECIPIENT => $ARGV[0]; use constant SERVER    => 'your-jabber-server'; use constant PORT      => 5222; use constant USER      => 'your-jabber-id'; use constant PASSWORD  => 'your-jabber-password'; use constant RESOURCE  => ' '; use constant MAXWAIT   => 2 ; if ("$ARGV[1]" eq "--html") { $htmlmessage  = $ARGV[2]; # printf("pre de-html-ize: htmlmessage = \"$htmlmessage\".\n"); $mymessage = HTML::FormatText->new->format(HTML::Parse::parse_html("$htmlmessage\n")); } else { $htmlmessage   = $ARGV[1]; $mymessage   = "$htmlmessage"; } # printf("htmlmessage = \"$htmlmessage\".\n"); # printf("message = \"$mymessage\".\n"); 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->SetTo($_); $message->SetSubject('Notification'); $message->SetType('chat'); $message->SetBody($mymessage); # printf("Will send text \"%s\".\n",$message->GetBody()); if ("$ARGV[1]" eq "--html") { $message->InsertRawXML("<html xmlns='http://jabber.org/protocol/xhtml-im'><body xmlns='http://www.w3.org/1999/xhtml'>$htmlmessage</body></html>"); } $connection->Send($message); sleep(MAXWAIT); } $connection->Disconnect(); exit;
Co všechno v tom skriptu nastavit?



Kód: [Vybrat]
use constant SERVER    => 'gmail.com'; use constant PORT      => 5222; use constant USER      => 'jmenopc@gmail.com'; use constant PASSWORD  => 'nejakeheslo'; Jak napíšu příjemce? V poli recipient to vypadá složitější....
Kód: [Vybrat]
use constant RECIPIENT => $ARGV[0];


invader

Re:Ohlášení stroje přes XMPP
« Odpověď #5 kdy: 16. 07. 2012, 14:55:45 »
ARGV[0] je prvni argument, prijemce tedy zadas jako prvni argument, zpravu kterou zaslat jako druhy argument. Pripadne, pokud se nic nebude menit a zprava bude vzdy stejna ji vepis rovnou do skriptu (tedy $ARGV[0] nahrad prijemcem a $ARGV[1] nahrad zpravou)

dale nastvujes server, uzivatel, heslo a v nekterych pripadech port

beer

  • *****
  • 729
    • Zobrazit profil
Re:Ohlášení stroje přes XMPP
« Odpověď #6 kdy: 16. 07. 2012, 15:23:54 »
ARGV[0] je prvni argument, prijemce tedy zadas jako prvni argument, zpravu kterou zaslat jako druhy argument. Pripadne, pokud se nic nebude menit a zprava bude vzdy stejna ji vepis rovnou do skriptu (tedy $ARGV[0] nahrad prijemcem a $ARGV[1] nahrad zpravou)

dale nastvujes server, uzivatel, heslo a v nekterych pripadech port

Super, takže pokud ve skriptu následující pole takto vyplnil:

use constant SERVER    => 'talk.google.com';
use constant PORT      => 5222;
use constant USER      => 'jmeno-pc@gmail.com';
use constant PASSWORD  => 'heslo';


a uložil celý skript třeba do souboru /root/gtalk.msg, nastavil spustitelný příznak, do /etc/rc.loocal bych jen mohl přidat řádek takto:

/root/gtalk.msg ARGV[0] jmeno-prijemce@gmail.com ARGV[1] "stroj s ip 10.2.2.4 se připojil" &

Chápu to správně, bude to fungovat? Nebo jak ty argumenty oddělovat?

invader

Re:Ohlášení stroje přes XMPP
« Odpověď #7 kdy: 16. 07. 2012, 16:06:37 »
Ne ty ARGV vynech..takze nejak takhle.

/root/gtalk.msg jmeno-prijemce@gmail.com "stroj s ip 10.2.2.4 se připojil"

Navic muzes potrebovat nainstalovat do perlu Net::Jabber

tedy jako root spust

perl -MCPAN -e 'install Net::Jabber'

pak by mel script fungovat (pokud nefunguje uz ted)

beer

  • *****
  • 729
    • Zobrazit profil
Re:Ohlášení stroje přes XMPP
« Odpověď #8 kdy: 16. 07. 2012, 16:22:14 »
Super, díky :-).

beer

  • *****
  • 729
    • Zobrazit profil
Re:Ohlášení stroje přes XMPP
« Odpověď #9 kdy: 16. 07. 2012, 18:01:57 »
A dalo by se zařídit, aby stroj poslal i zprávu, když se vypíná? Je něco jako /etc/rc.local pro vypínání?

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Ohlášení stroje přes XMPP
« Odpověď #10 kdy: 16. 07. 2012, 20:32:52 »
A dalo by se zařídit, aby stroj poslal i zprávu, když se vypíná? Je něco jako /etc/rc.local pro vypínání?

Pri vypinani se stroj prepina do urciteho runlevelu - ten by mohl konkretne zalezet na distribuci, tak zagooglujte. Do prislusneho adresare /etc/rc.X byste mohl podstrcit skript s nizkym cislem, aby se vam spustil jako prvni pri shutdownu. Akorat si nejsem jisty, co to bude delat, kdyz se vsude cpe upstart.

beer

  • *****
  • 729
    • Zobrazit profil
Re:Ohlášení stroje přes XMPP
« Odpověď #11 kdy: 18. 07. 2012, 01:15:33 »
Ne ty ARGV vynech..takze nejak takhle.

/root/gtalk.msg jmeno-prijemce@gmail.com "stroj s ip 10.2.2.4 se připojil"

Navic muzes potrebovat nainstalovat do perlu Net::Jabber

tedy jako root spust

perl -MCPAN -e 'install Net::Jabber'

pak by mel script fungovat (pokud nefunguje uz ted)

bohužel nefunguje:
./gtalk.msg nejaky@gmail test
Cannot connect ()

./gtalk.msg --help
Usage...
 notify <jabberid>[,<jabberid>]* [--html] <message>

Co dělám špatně?

invader

Re:Ohlášení stroje přes XMPP
« Odpověď #12 kdy: 18. 07. 2012, 07:51:49 »
jak mas nastaven server a port? Ma URCITE spravne login a heslo? Mne to funguje.

beer

  • *****
  • 729
    • Zobrazit profil
Re:Ohlášení stroje přes XMPP
« Odpověď #13 kdy: 18. 07. 2012, 10:22:36 »
Mám myslím správně, USER mám funkční gmailovou adresu, port se zdá být v pořádku, talk.google.com je také v pořádku..., heslo je funkční. Nutnost použít ssl myslím u gmailu není. Email na gmailu mi například v kecálcích empathy a pidgin, kopete a pod funguje úplně normálně jako jabber id.

use constant SERVER    => 'talk.google.com';
use constant PORT      => 5222;
use constant USER      => 'jmeno-pc@gmail.com';
use constant PASSWORD  => 'heslo';
use constant RESOURCE  => 'PC ';


Otázka je, jestli jsem nainstaloval správně perl -MCPAN -e 'install Net::Jabber' . Ptalo se mne to při instalaci na volby, kterým jsem nerozumněl, nechal jsem tedy výchozí nastavení a vždy potvrdil enterem.

beer

  • *****
  • 729
    • Zobrazit profil
Re:Ohlášení stroje přes XMPP
« Odpověď #14 kdy: 18. 07. 2012, 10:24:30 »
navíc jsem povolil chatování mezi jabber id v konfiguráku a jabber id, na který se posílá zpráva přímo v rozhraní gmailu.