in reply to wake on lan usage
try this one, it works fine for me. (forgot where i originally found it, likely from the link at the end)
#!/usr/bin/perl -w # # $Id: wakeonlan,v 1.4 2000/08/01 03:38:59 jpo Exp $ # ###################################################################### +### use strict; use Socket; use Getopt::Std; use vars qw($VERSION $opt_v $opt_h $opt_i $opt_p $opt_f); $VERSION = '0.40'; my $DEFAULT_IP = '255.255.255.255'; my $DEFAULT_PORT = getservbyname('discard', 'udp'); # # Process the command line # getopts("hvp:i:f:"); if ($opt_h) { usage(); exit(0); } if ($opt_v) { print "wakeonlan version $VERSION\n"; exit(0); } if (!$opt_f and !@ARGV) { usage(); exit(0); } if ($opt_i) { $DEFAULT_IP = $opt_i; } # override default if ($opt_p) { $DEFAULT_PORT = $opt_p; } # override default if ($opt_f) { process_file($opt_f); } # The rest of the command line are a list of hardware addresses foreach (@ARGV) { wake($_, $opt_i, $opt_p); } # # wake # # The 'magic packet' consists of 6 times 0xFF followed by 16 times # the hardware address of the NIC. This sequence can be encapsulated # in any kind of packet, in this case UDP to the discard port (9). # + sub wake { my $hwaddr = shift; my $ipaddr = shift || $DEFAULT_IP; my $port = shift || $DEFAULT_PORT; my ($raddr, $them, $proto); my ($hwaddr_re, $pkt); # Validate hardware address (ethernet address) $hwaddr_re = join(':', ('[0-9A-Fa-f]{1,2}') x 6); if ($hwaddr !~ m/^$hwaddr_re$/) { warn "Invalid hardware address: $hwaddr\n"; return undef; } # Generate magic sequence foreach (split /:/, $hwaddr) { $pkt .= chr(hex($_)); } $pkt = chr(0xFF) x 6 . $pkt x 16; # Alocate socket and send packet $raddr = gethostbyname($ipaddr); $them = pack_sockaddr_in($port, $raddr); $proto = getprotobyname('udp'); socket(S, AF_INET, SOCK_DGRAM, $proto) or die "socket : $!"; setsockopt(S, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt +: $!"; print "Sending magic packet to $ipaddr:$port with $hwaddr\n"; send(S, $pkt, 0, $them) or die "send : $!"; close S; } # # process_file # sub process_file { my $filename = shift; my ($hwaddr, $ipaddr, $port); open (F, "<$filename") or die "open : $!"; while(<F>) { next if /^\s*#/; # ignore comments next if /^\s*$/; # ignore empty lines chomp; ($hwaddr, $ipaddr, $port) = split; wake($hwaddr, $ipaddr, $port); } close F; } # # Usage # sub usage { print <<__USAGE__; Usage wakeonlan [-h] [-v] [-i IP_address] [-p port] [-f file] [[hardware +_address] ...] Options -h this information -v dislpays the script version -i ip_address set the destination IP address default: 255.255.255.255 (the limited broadcast address) -p port set the destination port default: 9 (discard port) -f file uses file as a source of hardware addresses See also wakelan(1) __USAGE__ } __END__ # Script documentation =head1 NAME wakeonlan - Perl script to wake up computers =head1 SYNOPSIS wakeonlan [-h] [-v] [-i IP_address] [-p port] [-f file] [[hardware_add +ress] ...] =head1 DESCRIPTION This script sends 'magic packets' to wake-on-lan enabled ethernet adap +ters and m otherboards, in order to switch on the called PC. Be sure to connect t +he NIC wit h the motherboard if neccesary, and enable the WOL function in the BIO +S. The 'magic packet' consists of 6 times 0xFF followed by 16 times the h +ardware ad dress of the NIC. This sequence can be encapsulated in any kind of pac +ket. This script uses UDP packets. =head1 OPTIONS =over =item -h Displays the help information. =item -v Dislpays the script version. =item -i ip_address Destination IP address. Unless you have static ARP tables you should use some kind of broadcast address (the broadcast address of the netwo +rk where t he computer resides or the limited broadcast address). Default: 255.25 +5.255.255 (the limited broadcast address). =item -p port Destination port. Default: 9 (discard port). =item -f file File with hardware addresses of wakeable computers. For an example che +ck the file lab001.wol in the examples subdirectory. =item -h Displays the help information. =item -v Dislpays the script version. =item -i ip_address Destination IP address. Unless you have static ARP tables you should use some kind of broadcast address (the broadcast address of the netwo +rk where t he computer resides or the limited broadcast address). Default: 255.25 +5.255.255 (the limited broadcast address). =item -p port Destination port. Default: 9 (discard port). =item -f file File with hardware addresses of wakeable computers. For an example che +ck the file lab001.wol in the examples subdirectory. =back =head1 EXAMPLES Using the limited broadcast address (255.255.255.255): $ wakeonlan 01:02:03:04:05:06 $ wakeonlan 01:02:03:04:05:06 01:02:03:04:05:07 Using a subnet broadcast address: $ wakeonlan -i 192.168.1.255 01:02:03:04:05:06 Using another destination port: $ wakeonlan -i 192.168.1.255 -p 1234 01:02:03:04:05:06 Using a file as a source of hardware addresses and IP addresses: $ wakeonlan -f examples/lab001.wol $ wakeonlan -f examples/lab001.wol 01:02:03:04:05:06 =head1 AUTHOR Jos\351 Pedro Oliveira <jpo@di.uminho.pt> maintaining and expanding or +iginal wor k done by Ico Doornekamp <ico@edd.dhs.org>. =head1 COPYRIGHT Copyright (c) 2000 Jos\351 Pedro Oliveira. This is free software. You may modify it and distribute it under Perl +'s Artisti c Licence. Modified versions must be clearly indicated. + =head1 SEE ALSO For more information regarding this script and Wakeonlan technology ju +st check t he following address http://gsd.di.uminho.pt/jpo/software/wakeonlan/. =cut
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: wake on lan usage
by primus (Scribe) on May 22, 2003 at 20:37 UTC |