トップ 差分 一覧 ソース 検索 ヘルプ ログイン

wol

インターネット経由で自宅パソコンの電源をオン

WOLレピータを購入or自作して設定

  • レピータを購入するならココで
  • ↑これを買った場合は説明書どおりにやればOKなのですが以下のような方法もあるってことで...
  • ↑説明書どおりだと2クリック必要ですが、こちらは1クリックで電源オン!
  • パソコンのbios画面でWOLをenableに設定
  • NATでポートの設定必要(2304でUDPを通すように)(←現在のバージョンは2304ではなく9)

dynamic DNSサービスに登録してドメイン名をゲット

perlの動く自分のwebsiteに以下のサイトを参照してcgiを設定

呼び出す

wol.cgi?macaddr=xxxxxxxxxxxx&ipaddr=xxx.xxx.xxx.xxx&passwd=xxxx
  • 上記を携帯などにブックマークして使用
  • IPアドレスのところは****.comのようにdynamic DNSサービスに登録したドメイン名でもOK
  • 念のため上記サイトのスクリプトをこのページの下の方にコピーしておく

インターネット経由で自宅パソコンの電源をオフ

↑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;
$_;
}