終於被我亂試出來了
相關討論在
http://phorum.study-area.org/viewtopic.php?t=32299以下是小弟對Jabber的簡單介紹以及理解,若有謬誤,請不吝指正:
[前言]Jabber是開放規格的IM protocal(Jabber底層是XMPP),前陣子Google推出的Google Talk也是使用Jabber作為其通訊協定。使用Jabber最大的好處就是有許許多多的Client程式可以使用,不用擔心相容性的問題。如Gaim就直接內建了Jabber protocal支援,只要有Gmail帳號者即可使用Gaim與Google Talk互通。原本的目標,是希望能針對Google Talk作即時的通知,但是因為我的主機因故不能裝perl的IO::Socket::SSL模組(Google Talk強制要使用TLS連線),是故最後使用jabber.org的帳號作為測試環境。
[需要安裝的套件]1.perl的版本需要5.8以上
2.perl的Net::XMPP模組
安裝方式:perl -MCPAN -e 'install Net::XMPP'
[申請帳號]1.開啟Gaim的帳號清單,點選"新增按鈕"
2."通訊協定"選擇"Jabber","帳號"輸入你想要的帳號(比方willie.tw)、"密碼"。"伺服器"欄位使用預設的jabber.org即可,其餘皆用預設值,然後按"註冊"。此時若你的帳號沒有人使用,則會註冊成功,否則會傳回註冊失敗的訊息。此時只要改帳號即可。
3.請加入"server_agent@jabber.org"為好友(這是我註冊的專用通知帳號XD),或者是你要設定自己專用的通知帳號也可以。
[程式碼]視需求修改以下程式碼17~19行,比如"willie.tw@jabber.org"改成你的帳號(xxx@jabber.org),存檔(假設檔名是sendMessage)。
請注意要將此檔存成utf8編碼,否則中文訊息會變成亂碼。
轉碼程式請參考iconv或piconv的manpage。
使用方式為:
sendMessage <client端的位址> <登入主機的位址>
#!/usr/bin/perl
use Net::XMPP;
use encoding utf8;
$client = new Net::XMPP::Client();
$client->SetCallBacks(
onauth => \&SendMessage
);
$client->Execute(
hostname => 'jabber.org',
port => 5222,
tls => 0,
username => 'server_agent',
password => 'asdfghjk',
resource => 'Work'
);
sub SendMessage {
$client->MessageSend(to=>'willie.tw@jabber.org',
subject=>"SSH登入通知",
body=>"使用者${ARGV[0]}登入主機${ARGV[1]}中...\n"
);
$client->Disconnect();
}
[使用示範]在/etc/hosts.allow加入下面這行,其中%c會被tcp_wrapper代換成登入者位址,%H會被代換成該主機的位址
sshd:ALL:spawn (/your/path/sendMessage %c %H) &
希望對各位有幫助