Skip to content

Instantly share code, notes, and snippets.

@SaidBySolo
Last active June 30, 2022 06:07
Show Gist options
  • Save SaidBySolo/d9b231f2cf544d977c1b45123369049a to your computer and use it in GitHub Desktop.
Save SaidBySolo/d9b231f2cf544d977c1b45123369049a to your computer and use it in GitHub Desktop.
from socket import AF_INET, SO_BROADCAST, SOCK_DGRAM, socket, SOL_SOCKET
class WOL:
def __init__(self, ip_address: str, mac_address: str, port: int = 6) -> None:
self.ip_address = ip_address
self.port = port
for char in [":", "-"]:
if char in self.mac_address:
self.mac_address = "".join(mac_address.split(char))
else:
self.mac_address = mac_address
if len(self.mac_address) != 12:
raise ValueError("MAC address must be 12 characters long")
def create_magic_packet(self):
return bytes.fromhex("F" * 12 + self.mac_address * 16)
def send_magic_packet(self):
with socket(AF_INET, SOCK_DGRAM) as sock:
sock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
sock.connect((self.ip_address, self.port))
sock.send(self.create_magic_packet())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment