wol.cgi?macaddr=xxxxxxxxxxxx&ipaddr=xxx.xxx.xxx.xxx&passwd=xxxx
↑WOLリピータと組み合わせるとオン・オフどちらもワンクリックの大変便利なソフトです。現在は結局これを使っています。
#!/usr/local/bin/perl use Socket; # 照合するパスワード(他人の使用を禁止します) $pass ='9876'; # CGIファイルのファイル名 $fname = 'wol.cgi'; # デフォルトのMACアドレス $macaddr = '0123456789AB'; # デフォルトのIPアドレス(ホスト名) $ipaddr = ''; # デフォルトのポート番号 $portno = '2304'; # デフォルトのパスワード $passwd = ''; if ($ENV{'REQUEST_METHOD'} eq 'GET') { $input = $ENV{'QUERY_STRING'}; } else { read(STDIN, $input, $ENV{'CONTENT_LENGTH'}); } @input = split(/[&;]/,$input); foreach (@input) { ($key, $val) = split(/=/); if ($key eq 'macaddr') { $macaddr = $val; } if ($key eq 'ipaddr') { $ipaddr = $val; } if ($key eq 'portno'){ $portno = $val; } if ($key eq 'passwd'){ $passwd = $val; } } if ($passwd eq $pass) { $macaddr=~s/-//g; $macaddr=~s/://g; $data = &chr16hex($macaddr); socket(SOCKET, PF_INET, SOCK_DGRAM, 0); $iaddr = inet_aton($ipaddr); $sock_addr = pack_sockaddr_in($portno, $iaddr); send(SOCKET, $data, 0, $sock_addr); print "Content-type: text/html\n\n"; print << "_EOF_"; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta name="robots" content="noindex, nofollow"> <meta name="googlebot" content="noindex, nofollow"> <meta name="robots" content="noarchive"> <meta name="googlebot" content="noarchive"> <title>Wake On Lan</title> </head> <body> <h1>Wake On Lan</h1> <hr> 送信しました </body> </html> _EOF_ } else { print "Content-type: text/html\n\n"; print << "_EOF_"; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta name="robots" content="noindex, nofollow"> <meta name="googlebot" content="noindex, nofollow"> <meta name="robots" content="noarchive"> <meta name="googlebot" content="noarchive"> <title>Wake On Lan</title> </head> <body> <h1>Wake On Lan</h1> <hr> <form name="form" method="post" action="./$fname"> MACアドレス:<input type="text" size="28" maxlength="17" name="macaddr" value="$macaddr"> IPアドレス:<input type="text" size="28" name="ipaddr" value="$ipaddr"> PORT番号:<input type="text" size="28" maxlength="5" name="portno" value="$portno"> PASSWORD:<input type="password" size="28" maxlength="20" name="passwd" value=""> <input type="submit" name="submit" value="送信"> <input type="reset" name="reset" value="クリア"> </form> </body> </html> _EOF_ } exit; sub chr16hex { local($mac) = @_; $_ = "ffffffffffff"; for ($i = 0; $i < 16; $i++) { $_ .= $mac; } 1 while s/([0-9A-Fa-f][0-9A-Fa-f])/pack("c",hex($1))/geo; $_; }