INDEX
Wake Up On LAN from perl
LAN経由でPCの電源を入れる Wakeup On LAN (WOL) するため、LAN に Magic Packet という特殊なパケットを送信する perl スクリプトです。
実際にWOLを行うには、対応したマザーボードやLANボード、BIOSの設定が必要になる。
1 |
#!/usr/bin/perl -T
##### Character-code is euc-jp. Tab-size is 4 space character. #####
###############################################################################
## wakeup : send a 'Magic Packet' to wake clients up
###############################################################################
use strict; # restrict unsafe constructs
use warnings; # control optional warnings ( as /usr/bin/perl -w )
use Socket;
my $DEFAULT_IPV4 = '255.255.255.255'; # broadcast IPv4 address.
my $DEFAULT_PORT = getservbyname('discard', 'udp'); # acquired value is 9.
#my $hwaddr = <HARDWARE MACADDR>;
#my $ipaddr = <BROADCAST IPADDR> || $DEFAULT_IPV4;
#my $port = <SENT PORT NUMBER> || $DEFAULT_PORT;
my ($hwaddr, $ipaddr, $port) = (@ARGV);
$hwaddr = $hwaddr || '';
$ipaddr = $ipaddr || $DEFAULT_IPV4;
$port = $port || $DEFAULT_PORT;
## Validate hardware address (MAC address)
if( $hwaddr !~ m/^[0-9A-Fa-f]{1,2}(?:[-:][0-9A-Fa-f]{1,2}){5}$/ ){
die "Invalid hardware address : $hwaddr\n";
}
## Generate send datas
my $sendbuff = '';
foreach( split(/[-:]/, $hwaddr) ){
$sendbuff .= chr( hex($_) );
}
$sendbuff = chr(0xFF) x 6 . $sendbuff x 16;
## Generate send addr
my $ipaddrsv = gethostbyname($ipaddr) or die "Invalid IP address : $ipaddr\n";
my $sockaddr = pack_sockaddr_in($port, $ipaddrsv);
## Alocate socket / send packet
socket(SOCKET, AF_INET, SOCK_DGRAM, 0) or die "socket : $!";
setsockopt(SOCKET, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt : $!";
send(SOCKET, $sendbuff, 0, $sockaddr) or die "send : $!";
close SOCKET;
print "Sent magic packet to $ipaddr:$port with $hwaddr\n";
###############################################################################
## End Of File (wakeup.pl) ##
############################################################################### |
第一引数が必須でMACアドレス、第二引数が送信IPアドレス、第三引数がポート番号。
最終更新時間:2008年11月18日 00時01分00秒 指摘や意見などあればSandBoxのBBSへ。
wakeup.pl