トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

Source/Perl/WakeUp

INDEX

Wake Up On LAN from perl

LAN経由でPCの電源を入れる Wakeup On LAN (WOL) するため、LAN に Magic Packet という特殊なパケットを送信する perl スクリプトです。

実際にWOLを行うには、対応したマザーボードやLANボード、BIOSの設定が必要になる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/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