From 491b8ed491dc2d8e74dacbcc22db315952fdfaf9 Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Sun, 3 Jan 2016 10:14:35 -0600 Subject: [PATCH] host: Add MagicPacket class --- src/rouse/host.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/rouse/host.py b/src/rouse/host.py index 708da45..3bdfef5 100644 --- a/src/rouse/host.py +++ b/src/rouse/host.py @@ -207,3 +207,30 @@ class Host(object): else: host.hostname = ni[0] return host + + +class MagicPacket(object): + + def __init__(self, macaddr): + self.macaddr = MacAddress(macaddr) + + @property + def payload(self): + payload = bytearray((0xff,) * 6) + payload += struct.pack(str('>Q'), self.macaddr.value)[-6:] * 16 + return bytes(payload) + + def send(self, ipaddr='255.255.255.255', port=9): + ai = socket.getaddrinfo(ipaddr, port, socket.AF_UNSPEC, + socket.SOCK_DGRAM) + for af, socktype, __, __, addr in ai: + s = None + try: + s = socket.socket(af, socktype) + s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) + s.sendto(self.payload, addr) + except: + continue + finally: + if s is not None: + s.close()