Skip to content

Instantly share code, notes, and snippets.

@maou-shonen
Forked from rschuetzler/Python Wake on LAN
Last active September 7, 2021 05:27
Show Gist options
  • Save maou-shonen/635d71a03b38c96ab2a11d9e2dc692a5 to your computer and use it in GitHub Desktop.
Save maou-shonen/635d71a03b38c96ab2a11d9e2dc692a5 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
# A Wake on LAN program that allows you to send magic packets over the Internet
# needs python >= 3.6
import socket, struct, argparse
class WakeOnLan():
def _makeMagicPacket(self, mac_address_str: str) -> bytes:
# Take the entered MAC address and format it to be sent via socket
mac_address = mac_address_str.split(':')
mac_address_hex = [int(ma, 16) for ma in mac_address]
# Pack together the sections of the MAC address as binary hex
mac_address_binary = struct.pack('BBBBBB', *mac_address_hex)
#create the magic packet from MAC address
magic_packet = b'\xff' * 6 + mac_address_binary * 16
return magic_packet
def sendMagicPacket(self, to_mac_address: str, broadcast_ip: str, *, broadcast_port: int = 7) -> None:
magic_packet = self._makeMagicPacket(to_mac_address)
conn = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
conn.sendto(magic_packet, (broadcast_ip, broadcast_port))
conn.close()
print(f'Magic Packet successfully sent to {to_mac_address}')
# Alias
send = sendMagicPacket
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('to_mac_address', help='mac address of the target device, example: 00:11:22:33:44:55')
parser.add_argument('broadcast_ip', help='broadcast IP, example: 192.168.0.255')
parser.add_argument('-p', '--broadcast_port', '--port', default=7, type=int, help='broadcast Port')
args = parser.parse_args()
WakeOnLan().send(
to_mac_address=args.to_mac_address,
broadcast_ip=args.broadcast_ip,
broadcast_port=args.broadcast_port,
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment