host: Add MagicPacket class
parent
ef822f8855
commit
491b8ed491
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue