====== 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]]\\