#! /usr/local/bin/perl
# 
# Copyright (C) 2004-2005 HUNDREDSOFT CORPORATION All Rights Reserved.
#
#  wol.cgi
#
#      MACアドレスは、ipconfig /all (win)や ifconfig (linux)でわかります。
#

use Socket;

$macaddr = '00-1f-c6-d7-f4-6d'; # xx-xx-xx-xx-xx-xx
$ipaddr = '210.159.241.66';  # xxx.xxx.xxx.xxx

# アドレス固定の方は
# 上の $macaddrと$ipaddrにコードを設定し,下の↓から↑の行まで
# コメントアウトしてください。
############################↓↓↓↓↓
$len = 80;
read(STDIN, $in, $len);
@in = split(/[&;]/,$in); 
foreach (@in){
	($key, $val) = split(/=/);
	if ($key eq 'macaddr' && $val ne '' ){
		$macaddr = $val;
	}
	if ($key eq 'ipaddr' && $val ne '' ){
		$ipaddr = $val;
	}
}
############################↑↑↑↑↑


$macaddr=~s/-//g;
$data = &chr16hex($macaddr);

socket(SOCKET, PF_INET, SOCK_DGRAM, 0);
$iaddr = inet_aton($ipaddr);
$sock_addr = pack_sockaddr_in(1024, $iaddr);

send(SOCKET, $data, 0, $sock_addr);


print "Content-type: text/html\n\n";
print<<"__SOUSIN_OK__";
<html>
<head>
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp">
<title>WOL sample</title>
</head>
<body BGCOLOR="#ffe0c0">
<center>
うまくいったかな？<BR>
<BR><BR><BR>
ブラウザの戻るボタンをクリックしてください<BR>
</center>
</body>
</html>
__SOUSIN_OK__


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


__END__

