Wakeup On LAN Perl

WakeUP ON LANのPerlでの実装。

WEBサーバーにCGIとして設置して、
外部からHTTPでサーバーと同じネットワークのPCが起動できる。

起動したらそのPCをVNCやらでリモート操作なりなんなりと。。

#!/usr/bin/perl

#-------------------------------------------------
# POWERON
#-------------------------------------------------
# Created by takuma
# Distributed in http://www.sky-air.net/
# Use at your own risk.
#-------------------------------------------------
#-------------------------------------------------
# Configure
#-------------------------------------------------
# IP addr to send
# 送信対象IPアドレス
# ブロードキャストアドレスを指定すべき
$CFG{'IP'} = "192.168.0.255";

# PORT to send (1-65535 to use)
# 送信ポート (1~65535 なんでも良い)
$CFG{'PORT'} = "49245";

# MAC addr of power on computer
# 起動対象PC MACアドレス
$CFG{'MAC'} = "12-34-56-78-9A-BC";


#-------------------------------------------------
# Code
#-------------------------------------------------
use Socket;

print "Content-type: text/html\n\n";
print "WakeUP ON LAN Start!!<br />";

for ($n = 0; $n < 3; $n++) {
	&PowerON();
}

print "Finished!!<br />";

sub PowerON {
	my ($strSockAddr);
	my ($i);
	my (@SendData);
	my (@MacData);
	
	# split mac addr
	@MacData = map {hex($_)} split(/\-/, $CFG{'MAC'});
	
	# Header
	push (@SendData, (0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF));
	
	# Data
	for ($i = 0; $i < 16; $i++) {
		push (@SendData, @MacData);
	}
	
	# send...
	socket(SOCKET, PF_INET, SOCK_DGRAM, getprotobyname("udp"));
	binmode(SOCKET);
	setsockopt(SOCKET, SOL_SOCKET, SO_BROADCAST, 1);
	$strSockAddr = pack_sockaddr_in($CFG{'PORT'}, inet_aton($CFG{'IP'}));
	send(SOCKET, pack("C*", @SendData), 0, $strSockAddr);
	close(SOCKET);
}

カテゴリー: 未分類 タグ: パーマリンク