Wake on LAN
Posted by danielmeyer on August 5, 2008
This technology has been around for a while, but I still think it’s cool.
If you have a computer you sometimes want to start up from a different computer, then you could send a Wake On LAN packet to the computer if it’s enabled for that.
Here’s a Python script I wrote that to wake up my computer at work if it was shut down, so I wouldn’t have to drive in just to start it up — the wake-on-LAN packet would be sent from another server on the internal network.
# Program: wakeup.py # Purpose: Sends a magic wakeup packet to the MAC address specified in the current user's .wolrc file # Programmer: Daniel Meyer # # Notes: The magic packet is actually built by wolpython.py, written by Marc Balmer. # See http://gsd.di.uminho.pt/jpo/software/wakeonlan/mini-howto/wolpython.txt import os,sys,re,string import wolpython def mac_well_formed(mac): return re.match('[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]', mac) # Main walrus_filename = os.environ['HOME'] + '/.wolrc' if not os.path.exists(walrus_filename): print 'wakeup: please place the MAC address of the computer you want to wake in ' + walrus_filename sys.exit() walrus = open(os.environ['HOME'] + '/.wolrc') mac = string.strip(walrus.readline()) while mac != '': if mac_well_formed(mac): print 'Sending wakeup message to ' + mac + '...', wolpython.WakeOnLan(mac) print 'done.' else: print 'MAC address "' + mac + '" skipped (not in xx:xx:xx:xx:xx:xx format).' mac = string.strip(walrus.readline())
If the computer-you-want-to-wake is running Linux, you can find its network address by running
/sbin/ifconfig and looking for the HWaddr; on Windows, run
ipconfig /all from the command prompt and look for the Physical Address.
This script is a little silly, because it has this idea of a .wolrc (“walrus”) file that contains the computer you always want to wake up, and it is only designed to work on Unix/Linux (it expects a HOME environment variable) — not very full-featured. I was proud of the walrus filename though. :)
You’d probably be better off using java-wakeonlan!
(Is it even really worth having my home computer’s network card always be awake listening for a wake-on-LAN packet that it might get once every couple of weeks? Hmm…)