Growl大好ããªã®ã§è²ããªã¨ããããéç¥åºæ¥ãããã«ããããã¨å¸¸ã
æã£ã¦ããã¾ãã¦ã
ãµã¨ããsshã§å
¥ã£ã¦ä½æ¥ãã¦ãããªã¢ã¼ããã·ã³ã§æéãããã³ãã³ãå®è¡ããã¨ãã«çµäºéç¥ãGrowlã§åããããããï¼ãã¨ã
ã¡ããã£ã¨èª¿ã¹ã¦ã¿ãã¨ä»¥ä¸ã®ã¨ã³ããªãã
- 離れたところからGrowlで通知 - UDPのパケットをSSHでポートフォワードする方法 - (ひ)メモ
- SSHでリモートのコンソールに接続しているとき、コマンドの終了をGrowlで通知したい - <s>gnarl,</s>技術メモ”’<marquee><textarea>¥
åè
ã¯Growlã®Networkéç¥ã使ããã®ãUDP 9887çªãã¼ãã§åãåã£ã¦éç¥ããããã¨ãã§ããã®ã§ãsshãã¼ããã©ã¯ã¼ãã¨UDP-TCPå¤æã使ã£ã¦ãªã¢ã¼ãã®UDPããã¼ã«ã«ã®UDPã«æã£ã¦ãããå¾è
ã¯sshãã¼ããã©ã¯ã¼ããå©ç¨ãã¦HTTPçµç±ã§ãã¼ã«ã«ã«éç¥ããããã¨ãããã®ã
ãã®å¾id:punitanããã«æãã¦ããã ããã®ã以ä¸ã®æ¹æ³ã
SSHだけでリモートサーバからローカルMacにGrowl通知したい! - punitan (a.k.a. punytan) のメモ
å°ç¨ãã°ãã¡ã¤ã«ãç¨æãã¦tail -fã使ã£ã¦ãã¼ã«ã«éç¥ããããã¨ããææ³ã
åºæ¥ãéãæ±ç¨çã«ã©ããªãªã¢ã¼ããã·ã³ã§ã使ããããã«ãã¨ããã®ãèããã¨ãã¯ããã°ãã¡ã¤ã«ã使ç¨ããæ¹æ³ãã«ãªãã§ãããããwgetçãªãã®ãç¡ãç°å¢ãããããç¡ãã¨æãã®ã§HTTPçµç±ãã¢ãªã ã¨æãã¾ãããã¼ã«ã«ã§HTTPãµã¼ããç«ã¡ä¸ããå¿ è¦ããããã®ã®ã
â¦ã§ãæ°ã«ãªã£ãã®ããUDPãããªãã¦TCPã§ã®éç¥ãã§ããâ¦ï¼ã
æã¯åºæ¥ãªãã£ãã®ããç¥ããªããã©ãGrowlã®è¨å®ç»é¢ã§ã"TCP port 23052 and UDP port 9887"ã£ã¦æ¸ãã¦ããããhttp://growl.info/documentation/developer/protocol.phpã«ãTCPãµãã¼ããã¦ããã£ã¦æ¸ãã¦ããã
"Listen for incoming notifications"ã«ãã§ãã¯ãã¦ããã°ã
$ telnet 127.0.0.1 23052 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'.
ã¨ãªãã®ã§23052çªãlistenããã¦ããã®ã¯ééãç¡ãã
ã®ã§ãUDPã§æµãã¦ãããã±ããã¨åããã®ã試ãã«TCP 23052çªãã¼ãã«æµãã¦ã¿ãããã¦ã³ã¨ãã¹ã³ã¨ãè¨ããªãããã®ã¸ãã¯ä»çµã¿ãéãããã ã
networkéç¥ã使ãã©ã¤ãã©ãªãå¹¾ã¤ãã½ã¼ã¹è¦ãã¦ã¿ããã©ãã©ããUDP 9887çªã使ããã®ã§TCPã使ããµã³ãã«ãè¦å½ãããªãã
ãããªã£ããGrowlèªä½ã®ã½ã¼ã¹ãè¦ãã¦ããâ¦ï¼ã¨Growl 1.2.1ã®ã½ã¼ã¹ããã¦ã³ãã¼ããã¦ãã¦Objective-Cã®ã½ã¼ã¹ãè¦ã¦ã¿ãã
GrowlRemotePathwayã¯ã©ã¹ãç¶æ¿ããGrowlTCPPathwayã¯ã©ã¹ã¨GrowlUDPPathwayã¯ã©ã¹ããã£ã¦ãå¾è
ã®æ¹ã«ã¯åãåã£ããã±ãããæ¤è¨¼ãã¦éç¥ããããã¸ãã¯ãããã¼ã£ã¨æ¸ãã¦ãã£ãã®ã ãã©ãåè
ã®æ¹ã¯ç¢ºãã«23052çªãã¼ãã使ã£ãNSConnectionãä½ããã¦ãã¦listenãã¦ããããã ãã©â¦ãã¼ã¿ãåãã¦å¦çããé¨åã®ãã¸ãã¯ãè¦å½ãããªãâ¦ããã¯ããã¼ãªã®ã ãããï¼ã¸ãã¯ãªè¦ãããã§ããªãã®ã§èªä¿¡ãªããã©ãã
ã¨ãããã¨ã§TCPã§ã®éç¥ãã§ããã°sshãã¼ããã©ã¯ã¼ãã ãã§éç¥åºæ¥ããã§è¯ãããªã¼ã¨æã£ã¦ãããã©ããã¯ã¡ãã£ã¨è«¦ããã
ãã¨è©¦ãã¦ã¿ããã¨æã£ãã®ãUDPã®NATè¶ãããªã¢ã¼ããã·ã³ã¯global IPãããããã¼ã«ã«ãã·ã³ã¯private IPãããªããã¨ããå ´åã«ãªã¢ã¼ã->ãã¼ã«ã«ã®UDPãã¼ã¿éä¿¡ãã§ããªããã®ã ãã©ãUDP hole punchingã¨ããæè¡ããã£ãããã¦ãNATã®åããå´ã«UDPãã¼ã¿éä¿¡ãããã¨ãå¯è½ãããï¼å
æ¥ã¾ã§å
¨ç¶ãããªãã£ãï¼ã
ä¸è¨ã®ãããªã±ã¼ã¹ã®å ´åããªã¢ã¼ãå´ã§ä¸åº¦é©å½ãªãã¼ãã§UDPãµã¼ããç«ã¡ä¸ãã¦ããã¦ãã¼ã«ã«ããèªåã®ãã¼ããæå®ãã¦UDPã®ãã±ãããéä¿¡ãããã¨ãªã¢ã¼ãã§ã¯éä¿¡å
ã®æ
å ±ã¨ãã¦éä¿¡å
ã«ã¼ã¿ã®IPã¢ãã¬ã¹ã¨ãNATã«ãã£ã¦å¤æããããã¼ãçªå·ãããããããã«UDPãéãè¿ãã¦ããã°NATã®åããå´ã«ãããã¼ã«ã«ãã·ã³ã«å±ããã¨ããä»çµã¿ãããã
#!/usr/bin/env perl use strict; use warnings; use IO::Socket::INET; my $sock = IO::Socket::INET->new( LocalPort => 15873, Proto => 'udp', ) or die $!; while (1) { my $buf; my $ca = $sock->recv($buf, 65535); my ($port, $addr) = unpack_sockaddr_in($ca); my $ip = inet_ntoa($addr); print "from $ip:$port\n"; }
ãªã©ã®ãããªUDPãµã¼ãããªã¢ã¼ãå´ã§ç«ã¡ä¸ãã¦ããã¦ããã¼ã«ã«å´ã§ã¯
#!/usr/bin/env perl use strict; use warnings; use IO::Socket::INET; my $sock = IO::Socket::INET->new( LocalPort => '9887', PeerAddr => '<ãªã¢ã¼ããã·ã³ã®IPã¢ãã¬ã¹>' PeerPort => '15873', Proto => 'udp', ) or die $!; print $sock 'hoge';
ã¨éã£ã¦ãããã¨ã
$ perl udp_server.pl from ***.***.***.***:49002
ã®ããã«éä¿¡å
ã®æ
å ±ãã¨ããã®ã§ãããã«UDPãã±ãããéã£ã¦ããã°è¯ãã¨ãããã¨ã«ãªãã
ãã¼ã«ã«ã§ã¯
#!/usr/bin/env perl use strict; use warnings; use Growl::Any; my $growl = Growl::Any->new( appname => 'MyApp', events => ['ev1'] ); $growl->notify('ev1', 'title', 'message');
ãªã©ã§applicationãå ã«ç»é²ãã¦ããããªã¢ã¼ãå´ã§ã¯Net::GrowlClient(ããããéä¿¡å portã¾ã§æå®åºæ¥ãå¯ä¸ã®ã©ã¤ãã©ãªï¼)ã使ã£ã¦éä¿¡ããã
#!/usr/bin/env perl use strict; use warnings; use utf8; use Net::GrowlClient; my $growl = Net::GrowlClient->init( CLIENT_TYPE_NOTIFICATION => 1, CLIENT_PEER_HOST => '<éä¿¡å (ãã¼ã«ã«ãã·ã³å´)ã®IPã¢ãã¬ã¹>', CLIENT_PEER_PORT => 49002, CLIENT_APPLICATION_NAME => 'MyApp', CLIENT_PASSWORD => '***********', ) or die $!; $growl->notify( title => 'Notification from Remote!', message => 'ããã«ã¡ã¯ããã«ã¡ã¯ï¼', notification => 'ev1', );
åºæ¥ãï¼ï¼
â¦ãã©ã³ã¬ã¯NATã®å¤æãã¼ãã«ããã¼ãçªå·ã®å¯¾å¿è¡¨ããã¤æ´æ°ãããåãããªãã®ã§é »ç¹ã«ãã¼ã«ã«ããUDPãã±ããéä¿¡ãã¦ãã¼ã確ãããå¿
è¦ããã£ããããããããªã¢ã¼ãå´ã§Net:GrowlClientã«ä¾åããããã使ããªãã¨UDPãã±ããä½ãã®å¤§å¤ã ããããå
¨ç¶ç¾å®çãããªãã
çµè«
ãã£ã±ããã°ãã¡ã¤ã«ç¨æãã¦tail -fããããhttpãµã¼ãç«ã¡ä¸ãã¦ãã¼ããã©ã¯ã¼ããã¦ããã¦wgetããè¯ãã¨æãã¾ãã