use strict;
use warnings;
use Socket;

while (@ARGV)
  {	send_wol_broadcast(shift(@ARGV)); }

sub send_wol_broadcast
  {
	my $mac = shift;

	die "Fehler in MAC-Addrese $mac\n"
     if ($mac !~ /([0-9a-f]{2}:){5}[0-9a-f]{2}/i);

	# Doppelpunkte entfernen
	$mac =~ tr/://d;

	# Magic packet: 6 x FF, 16 x MAC-Adresse
	my $magic = ("\xff" x 6) . (pack('H12', $mac) x 16);

	# Create socket
	socket(S, PF_INET, SOCK_DGRAM, getprotobyname('udp'))
		 or die "Oops - Socket: $!\n";

	# Enable broadcast
	setsockopt(S, SOL_SOCKET, SO_BROADCAST, 1)
    or die "Oops - Setsockopt: $!\n";

	# Paket senden
	die "Oops - Send: $!\n" unless
	   defined(send(S, $magic, 0, sockaddr_in(0x2fff, INADDR_BROADCAST)));
	close(S);
  }
