====== Python ソケット プログラミング ====== ===== Python で Wake on LAN のマジックパケットを送信する ===== [[wpjp>Wake-on-LAN|Wake-on-LAN - Wikipedia]]\\ #!/usr/bin/env python3 # -*- coding: utf-8 -*- import argparse import socket import struct from traceback import print_exc DEFAULT_PORT = 7 # 7 or 9 or 30000 ? #BROADCAST_IPADDR = '' BROADCAST_IPADDR = '255.255.255.255' def send_magic_packet(mac_addr, port=DEFAULT_PORT): # create socket with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock: sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # parse address wol_mac = mac_addr.upper().replace('-', '').replace(':', '') if len(wol_mac) != 12: raise Exception('invalid MAC address format: {}'.format(mac_addr)) buf = b'f' * 2 * 6 + (wol_mac * 16).encode() # encode to magic packet payload magic_packet = b'' for i in range(0, len(buf), 2): magic_packet += struct.pack('B', int(buf[i:i + 2], 16)) # send magic packet print('Sending magic packet for: {}, broadcast port is {} ...'.format(mac_addr, port)) sock.sendto(magic_packet, (BROADCAST_IPADDR, port)) def parse_args(): parser = argparse.ArgumentParser() parser.add_argument('mac_address', help='Target MAC address.', type=str) parser.add_argument('-p', '--port', help='Default broadcast port is {}.'.format(DEFAULT_PORT), default=DEFAULT_PORT, type=int) return parser.parse_args() def main(): args = parse_args() mac_addr = args.mac_address port = args.port try: #mac_addr = "AA:BB:CC:DD:EE:FF" send_magic_packet(mac_addr, port) except BaseException: print_exc() if __name__ == '__main__': main() **実行例:**\\ $ python wol.py usage: wol.py [-h] [-p port] mac_address wol.py: error: the following arguments are required: mac_address $ python wol.py -h usage: wol.py [-h] [-p port] mac_address positional arguments: mac_address Target MAC address. optional arguments: -h, --help show this help message and exit -p port, --port port Default broadcast port is 7. ターゲットの MAC address にマジックパケットを送信する。\\ $ python wol.py 68:96:7b:07:21:55 ターゲットの PC が起動する。\\ Sending magic packet for: 68:96:7B:07:21:55, broadcast port is 7 ... ===== 参考文献 ===== [[https://kapibara-sos.net/archives/853|PythonでWake-on-lan]]\\ [[https://emptypage.jp/gadgets/wol.html|wol.py]]\\ [[http://e-words.jp/w/%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%83%91%E3%82%B1%E3%83%83%E3%83%88.html|マジックパケットとは - IT用語辞典 e-Words]]\\ [[https://www.atmarkit.co.jp/ait/articles/2004/20/news021.html|【リモートワーク自由自在】Windows 10 Wake On LAN(WoL)入門 (1/2):WoLでPCを起動 - @IT]]\\