1 |
package wol; |
2 |
|
3 |
use warnings; |
4 |
use strict; |
5 |
|
6 |
use IO::Socket::INET; |
7 |
|
8 |
sub power_on { |
9 |
my ($mac,$host,$port) = @_; |
10 |
|
11 |
$mac ||= 'FF:FF:FF:FF:FF:FF'; |
12 |
$host ||= '255.255.255.255'; |
13 |
$port ||= 9; # discard |
14 |
|
15 |
my $sock = IO::Socket::INET->new( Proto=>'udp' ); |
16 |
my $ip_addr = inet_aton($host); |
17 |
my $sock_addr = sockaddr_in($port, $ip_addr); |
18 |
$mac =~ s{:}{}g; |
19 |
|
20 |
my $packet = pack('C6H*', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, $mac x 16); |
21 |
|
22 |
setsockopt($sock, SOL_SOCKET, SO_BROADCAST, 1); |
23 |
send($sock, $packet, 0, $sock_addr); |
24 |
close ($sock); |
25 |
} |
26 |
|
27 |
1; |