Skip to content

Instantly share code, notes, and snippets.

@DavidLutton
Created November 14, 2023 20:57
Show Gist options
  • Save DavidLutton/ecf5a8b78c81b3931da2c529301c98ab to your computer and use it in GitHub Desktop.
Save DavidLutton/ecf5a8b78c81b3931da2c529301c98ab to your computer and use it in GitHub Desktop.
Wake on LAN
import struct
import socket
def wake_on_lan(mac, *, broadcast="192.168.1.255"):
"""Send WOL pachet.
https://en.wikipedia.org/wiki/Wake-on-LAN
"""
match len(mac):
case 12:
pass
case 12 + 5:
sep = mac[2]
mac = mac.replace(sep, '')
case _:
raise ValueError('Unexpected MAC address format {}'.format(mac))
if isinstance(mac, str):
mac = bytes(mac.encode())
data = b"".join([b"FFFFFFFFFFFF", mac * 16])
send_data = b""
for i in range(0, len(data), 2):
send_data = b"".join([send_data, struct.pack("B", int(data[i : i + 2], 16))])
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto(send_data, (broadcast, 9))
# wake_on_lan('3c:4a:92:88:d2:c8') # NAS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment