#!/usr/bin/env python3 import binascii import socket import argparse import sys PORT_DEFAULT = 9 IPADDR_DEFAULT = '' _USAGE = """Usage: python wol.py [options] ... Options: -p, --port Default port is 9 -a, --address Default IP address is '' -h, --help Show this help. """ def send_magic_packet(macs, ipaddr=IPADDR_DEFAULT, port=PORT_DEFAULT): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) for mac in macs: for sep in ':-': if sep in mac: mac = ''.join([x.rjust(2, '0') for x in mac.split(sep)]) break mac = mac.rjust(12, '0') p = b'\xff' * 6 + binascii.unhexlify(mac.encode()) * 16 s.sendto(p, (ipaddr, port)) s.close() def main(): parser = argparse.ArgumentParser(description='Wake-on-LAN utility') parser.add_argument('mac_addresses', metavar='MAC address', nargs='+', help='MAC address(es) of the target machine(s)') parser.add_argument('-p', '--port', type=int, default=PORT_DEFAULT, help='UDP port to use for sending the magic packet') parser.add_argument('-a', '--address', default=IPADDR_DEFAULT, help='IP address to broadcast the magic packet to') args = parser.parse_args() send_magic_packet(args.mac_addresses, args.address, args.port) if __name__ == '__main__': main()