host: Add MagicPacket class

master
Dustin 2016-01-03 10:14:35 -06:00
parent ef822f8855
commit 491b8ed491
1 changed files with 27 additions and 0 deletions

View File

@ -207,3 +207,30 @@ class Host(object):
else: else:
host.hostname = ni[0] host.hostname = ni[0]
return host 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()