From 5ddb542c1ced5c33f5b9bbaf8fb8d361029d8d7f Mon Sep 17 00:00:00 2001 From: Loic Nageleisen Date: Thu, 23 Jan 2014 14:26:32 +0100 Subject: [PATCH] wol -> wakeonlan --- wakeonlan | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ wol.py | 38 -------------------------- 2 files changed, 79 insertions(+), 38 deletions(-) create mode 100755 wakeonlan delete mode 100755 wol.py diff --git a/wakeonlan b/wakeonlan new file mode 100755 index 0000000..f9b5757 --- /dev/null +++ b/wakeonlan @@ -0,0 +1,79 @@ +#!/usr/bin/python + +# wakeonlan [-h] [-v] [-i IP_address] [-p port] [-f file] +# [[hardware_address] ...] + + +from __future__ import division, print_function, unicode_literals + +from socket import socket, AF_INET, SOCK_DGRAM, SOL_SOCKET, SO_BROADCAST +import argparse + + +VERSION = '0.6.0' + + +def interact(): + import code + code.InteractiveConsole(locals=globals()).interact() + + +def mac_to_bytes(mac): + try: # py2 + return b''.join(chr(int(b, 16)) for b in mac.split(':')) + except TypeError: # py3 + return bytes([int(b, 16) for b in mac.split(':')]) + + +def bytes_to_mac(bytes): + try: # py3 + return ':'.join("%02X" % b for b in bytes).lower() + except TypeError: # py2 + return ':'.join("%02X" % ord(b) for b in bytes).lower() + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument('-v', '--version', + action='version', + version='%(prog)s ' + VERSION) + parser.add_argument('-i', '--ip_address', + dest='ip_address', + default="255.255.255.255", + help="set the destination IP address") + parser.add_argument('-p', '--port', + dest='port', + type=int, + default=9, + help="set the destination port") + parser.add_argument('-f', '--file', + dest='file', + help="uses file as a source of hardware addresses") + parser.add_argument('hardware_addresses', + metavar='hardware_address', + help='MAC address to wake up', + nargs='+') + + return parser.parse_args() + + +def send_magic_packet(sock, ip_address, port, hardware_address): + data = b'\xFF' * 6 + mac_to_bytes(hardware_address) * 16 + + print("Sending magic packet to %s:%s with %s" % + (ip_address, port, bytes_to_mac(mac_to_bytes(hardware_address)))) + + sock.sendto(data, (ip_address, port)) + + +def wake_all(hardware_addresses, ip_address='255.255.255.255', port=9): + sock = socket(AF_INET, SOCK_DGRAM) + sock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) + for hardware_address in hardware_addresses: + send_magic_packet(sock, ip_address, port, hardware_address) + sock.close() + + +if __name__ == '__main__': + args = parse_args() + wake_all(args.hardware_addresses, args.ip_address, args.port) diff --git a/wol.py b/wol.py deleted file mode 100755 index ffcf9d0..0000000 --- a/wol.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/python -from __future__ import division, print_function, unicode_literals - -from socket import socket, AF_INET, SOCK_DGRAM, SOL_SOCKET, SO_BROADCAST - - -def interact(): - import code - code.InteractiveConsole(locals=globals()).interact() - - -def mac_to_bytes(mac): - try: # py2 - return b''.join(chr(int(b, 16)) for b in mac.split(':')) - except TypeError: # py3 - return bytes([int(b, 16) for b in mac.split(':')]) - - -def bytes_to_mac(bytes): - try: # py3 - return ':'.join("%02X" % b for b in bytes).lower() - except TypeError: # py2 - return ':'.join("%02X" % ord(b) for b in bytes).lower() - - -mac = "78:2b:cb:93:fc:8e" -destination = "255.255.255.255" -port = 9 - -data = b'\xFF' * 6 + mac_to_bytes(mac) * 16 - -print("Sending magic packet to %s:%s with %s" % - (destination, port, bytes_to_mac(mac_to_bytes(mac)))) - -sock = socket(AF_INET, SOCK_DGRAM) -sock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) -sock.sendto(data, (destination, port)) -sock.close()