#!/usr/bin/env python # # Credits: http://code.activestate.com/recipes/358449-wake-on-lan/ import socket import struct import sys def wake_on_lan(macaddress): """ Switches on remote computers using WOL. """ # Check macaddress format and try to compensate. if len(macaddress) == 12: pass elif len(macaddress) == 12 + 5: sep = macaddress[2] macaddress = macaddress.replace(sep, '') else: raise ValueError('Incorrect MAC address format') # Pad the synchronization stream. data = ''.join(['FFFFFFFFFFFF', macaddress * 20]) send_data = '' # Split up the hex values and pack. for i in range(0, len(data), 2): send_data = ''.join([send_data, struct.pack('B', int(data[i: i + 2], 16))]) # Broadcast it to the LAN. sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) sock.sendto(send_data, ('', 7)) if __name__ == '__main__': hostmac = { 'brahm' : '00:13:d3:a7:24:51', 'hp' : '00:02:e3:3c:c9:3b' } if len(sys.argv) == 1: print "Usage: %s " % sys.argv[0] print "" print "Hosts configured: " for host, mac in hostmac.iteritems(): print " - %s : %s" % (host, mac) sys.exit(64) if hostmac.has_key(sys.argv[1]): wake_on_lan(hostmac[sys.argv[1]]) else: wake_on_lan(sys.argv[1])