Fórum Root.cz

Hlavní témata => Sítě => Téma založeno: beer 16. 07. 2012, 12:21:39

Název: Ohlášení stroje přes XMPP
Přispěvatel: beer 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?
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: Petr Krčmář 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.
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: invader 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
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 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.
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 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 (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];
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: invader 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
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 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?
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: invader 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)
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 16. 07. 2012, 16:22:14
Super, díky :-).
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 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í?
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: JardaP . 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.
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 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ě?
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: invader 18. 07. 2012, 07:51:49
jak mas nastaven server a port? Ma URCITE spravne login a heslo? Mne to funguje.
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 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.
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 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.
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 18. 07. 2012, 10:27:05
Přemýšlel jsem, jestli by nebylo jednodušší odeslání emailu. Ale zřejmě nebylo. Nainstaloval jsem program mail, ale konfigurace je na mne dost složitá. Co takhle nějaký jabber klient pro příkazovou řádku, který by se dal spustit skriptem a nastavil by po startu stav na online?
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: invader 18. 07. 2012, 10:58:28
a telnetem se z toho stroje na port 5222 talk.google.com pripojis ? Modul Net::Jabber mas urcite nainstalovan spravne, kdybys nemel, rvalo by to jinak.

Jak rikam, ja to pouzivam a funguje mi to bez jakychkoli problemu. Mozna zkus prozkoumat ten skript a zkus ho nechat vypisovat i podrobnejsi chyby. Nicmene tech moznosti je urcite mnohem vice. Jabber klienti s moznosti odesilani zprav primo z radky rozhodne existuji.
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 18. 07. 2012, 11:07:32
a telnetem se z toho stroje na port 5222 talk.google.com pripojis ? Modul Net::Jabber mas urcite nainstalovan spravne, kdybys nemel, rvalo by to jinak.

Jak rikam, ja to pouzivam a funguje mi to bez jakychkoli problemu. Mozna zkus prozkoumat ten skript a zkus ho nechat vypisovat i podrobnejsi chyby. Nicmene tech moznosti je urcite mnohem vice. Jabber klienti s moznosti odesilani zprav primo z radky rozhodne existuji.

Telnet můžu zkusit. Nebo zkusit změnit port na 5223. Nebo možná jsem měl po instalaci restartovat PC, to jsem nezkoušel... Nebo mohu vyzkoušet nějaké jiné jabber id, mimo gmail.
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: invader 18. 07. 2012, 11:16:10
restartovat rozhodne nemusis. A port muzes urcite nechat na 5222.
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 18. 07. 2012, 12:47:52
Dle skriptu to vypadá, že problém není ve jméně a v hesle, ale že se nepřipojí na talk.google.com.

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";


Kdyby byla chyba v autoriziaci, hlásilo by to zřejmě Ident/Auth with server failed: $result[0] - $result[1].
Možná bych měl nastavit nějak jinak resource?

Zkoušel si to na běžném jabberu, nebo google talku?

Neměl bych tam někam přidat


componentname => 'gmail.com';
connectiontype => 'tcpip';
tls => 1;

Jako je to v tomto skriptu: http://blogs.perl.org/users/marco_fontani/2010/03/google-talk-with-perl.html (http://blogs.perl.org/users/marco_fontani/2010/03/google-talk-with-perl.html)?

Také se tam píše toto:

This is an example of the string used to authenticate to gtalk:

<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'
    mechanism='PLAIN'
    xmlns:ga='http://www.google.com/talk/protocol/auth'
    ga:client-uses-full-bind-result='true'>
    HASHED_USER+PASS_INFO
</auth>

The difference between what Google needs and what the Jabber modules give is enough for the Google servers to give an error.


Pravděpodobně skript se vůbec k ověření jména a hesla nedostane, protože ověřuje jinak, než potřebuje google. Pokud si testoval na normálním jabber serveru, je možné, že ti to funguje, a protože já používám jabber id od googlu, tak mi to nefunguje. Pokud je tomu tak, tak je nejjednodušší řešení, abych si udělal pro tyto účely nějaké standardní jabber id.
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 18. 07. 2012, 12:50:28
Nejsem programátor, perl je pro mne španělská vesnice, zde jsem se s ním setkal poprvé, půjdu asi nejjednodušší cestou. Ten autentizační řetězec upravit tak, aby pasoval do tohoto skriptu zřejmě nedokážu.
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: invader 18. 07. 2012, 13:35:47
no ja mam normalni jabber ucet na jabber.cz . Pokud to na google nefunguje, proc nepouzijes perl script na tebou odkazovane strance? Uplne dole je i priklad pouziti.
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 18. 07. 2012, 13:48:24
no ja mam normalni jabber ucet na jabber.cz . Pokud to na google nefunguje, proc nepouzijes perl script na tebou odkazovane strance? Uplne dole je i priklad pouziti.

Moc tomu příkladu totiž nerozumím :-).

je tam:
perl notify.pl youruser PASSWORD 'notify v1.0' another@googlemail.com 'this is a test message'

Nevím, zdali ten skript se má uložit jako notify.pl, jestli youruser má bý uživatelské jméno, nebo celý gmail, co je to to 'notify v1.0', jestli vyskočí nějaké oznamovací okno, či co... Vzhledem k tomu, že by vlastně odesílal zprávu root, tak nějaké vyskakovací okno s hláškami není žádoucí.
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: invader 18. 07. 2012, 14:02:47
no nejlepsi je to vyzkouset ne?:) takze to prvni je jen username BEZ "@gmail.com"  misto toho notify v1.0 dej do tech apostrofu cokoli chces, je to oznaceni resource, pak ten cilovy ucet na ktery se to ma poslat zadej cely jako treba pokus@gmail.com nebo i jaky koli jiny mimo google, treba pokus@jabber.cz (nevim kam to chces posilat, zadej tam proste cely cilovy  ucet vcetne domeny) no a pak do apostrofu zpravu...ted jsem to zkusil a opet to funguje:)...neboj se trosku experimentovat...

takze treba:

./notify.pl pokusnyucet 'work' pokusnyucet2@jabber.cz 'pokusna zprava'

Skript pojmenuj jak chces, jen je dobra konvence pojmenovavat perl skripty s koncovkou .pl a dej mu taky priznak pro sputeni (chmod u+x ./notify.pl)
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 18. 07. 2012, 14:15:28
Super, díky :-). Ono to s tím zkoušením moc nejde, když jsem v práci a nemám zde k dispozici stroj s linuxem :-).
Mylně jsem se domníval, že notify jsou taková ta oznamovací okna, která zobrazují například přehrávače atd.
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: invader 18. 07. 2012, 14:21:41
jeste v te ukazce pouziti mi chybi heslo, takze spravne takto:

./notify.pl pokusnyucet heslo 'work' pokusnyucet2@jabber.cz 'pokusna zprava'
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: alfi 18. 07. 2012, 14:46:49
Přemýšlel jsem, jestli by nebylo jednodušší odeslání emailu. Ale zřejmě nebylo. Nainstaloval jsem program mail, ale konfigurace je na mne dost složitá.
co je na mailu složitého? teda pokud už ten stroj umí poštu odesílat (lokální postfix nebo tak něco), což se stejně hodí, protože tam občas něco píše i systém..

Kód: [Vybrat]
echo "text emailu" | mail jmeno@domena
jinak bych zkusil i třeba http - a na druhé straně to sbírat buď jen v logu nebo s nějakou primitivní aplikací do souboru nebo i databáze.. :)

Kód: [Vybrat]
wget http://nejaky.server/?ip=12.34.56.78
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 18. 07. 2012, 15:04:43
Přemýšlel jsem, jestli by nebylo jednodušší odeslání emailu. Ale zřejmě nebylo. Nainstaloval jsem program mail, ale konfigurace je na mne dost složitá.
co je na mailu složitého? teda pokud už ten stroj umí poštu odesílat (lokální postfix nebo tak něco), což se stejně hodí, protože tam občas něco píše i systém..

Kód: [Vybrat]
echo "text emailu" | mail jmeno@domena
jinak bych zkusil i třeba http - a na druhé straně to sbírat buď jen v logu nebo s nějakou primitivní aplikací do souboru nebo i databáze.. :)

Kód: [Vybrat]
wget http://nejaky.server/?ip=12.34.56.78
Název: Re:Ohlášení stroje přes XMPP
Přispěvatel: beer 18. 07. 2012, 15:06:16
zase mne to odhlásilo, psal, jsem, že s tím lokálním mailem by to bylo složitější, protože jsme ve společné síti, jen když se přihlásím do n2n a těch sítí mám několik, s n2n mám potíž, když běží více sítí najednou.