差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
python:socket:programming [2020/05/30 07:25] – 作成 ともやん | python:socket:programming [2021/06/25 15:48] (現在) – ともやん | ||
---|---|---|---|
行 1: | 行 1: | ||
====== Python ソケット プログラミング ====== | ====== Python ソケット プログラミング ====== | ||
+ | |||
+ | ===== Python で Wake on LAN のマジックパケットを送信する ===== | ||
+ | [[wpjp> | ||
+ | |||
+ | <WRAP prewrap 100% # | ||
+ | <code python> | ||
+ | # | ||
+ | # -*- coding: utf-8 -*- | ||
+ | import argparse | ||
+ | import socket | ||
+ | import struct | ||
+ | from traceback import print_exc | ||
+ | |||
+ | DEFAULT_PORT = 7 # 7 or 9 or 30000 ? | ||
+ | # | ||
+ | BROADCAST_IPADDR = ' | ||
+ | |||
+ | def send_magic_packet(mac_addr, | ||
+ | # create socket | ||
+ | with socket.socket(socket.AF_INET, | ||
+ | sock.setsockopt(socket.SOL_SOCKET, | ||
+ | # parse address | ||
+ | wol_mac = mac_addr.upper().replace(' | ||
+ | if len(wol_mac) != 12: | ||
+ | raise Exception(' | ||
+ | buf = b' | ||
+ | # encode to magic packet payload | ||
+ | magic_packet = b'' | ||
+ | for i in range(0, len(buf), 2): | ||
+ | magic_packet += struct.pack(' | ||
+ | |||
+ | # send magic packet | ||
+ | print(' | ||
+ | sock.sendto(magic_packet, | ||
+ | |||
+ | def parse_args(): | ||
+ | parser = argparse.ArgumentParser() | ||
+ | parser.add_argument(' | ||
+ | parser.add_argument(' | ||
+ | help=' | ||
+ | default=DEFAULT_PORT, | ||
+ | return parser.parse_args() | ||
+ | |||
+ | def main(): | ||
+ | args = parse_args() | ||
+ | mac_addr = args.mac_address | ||
+ | port = args.port | ||
+ | |||
+ | try: | ||
+ | #mac_addr = " | ||
+ | send_magic_packet(mac_addr, | ||
+ | |||
+ | except BaseException: | ||
+ | print_exc() | ||
+ | |||
+ | if __name__ == ' | ||
+ | main() | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | **実行例: | ||
+ | <WRAP prewrap 100%> | ||
+ | <code powershell> | ||
+ | $ python wol.py | ||
+ | </ | ||
+ | </ | ||
+ | <WRAP prewrap 100% #result> | ||
+ | <code powershell> | ||
+ | usage: wol.py [-h] [-p port] mac_address | ||
+ | wol.py: error: the following arguments are required: mac_address | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP prewrap 100%> | ||
+ | <code powershell> | ||
+ | $ python wol.py -h | ||
+ | </ | ||
+ | </ | ||
+ | <WRAP prewrap 100% #result> | ||
+ | <code powershell> | ||
+ | usage: wol.py [-h] [-p port] mac_address | ||
+ | |||
+ | positional arguments: | ||
+ | mac_address | ||
+ | |||
+ | optional arguments: | ||
+ | -h, --help | ||
+ | -p port, --port port Default broadcast port is 7. | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ターゲットの MAC address にマジックパケットを送信する。\\ | ||
+ | <WRAP prewrap 100%> | ||
+ | <code powershell> | ||
+ | $ python wol.py 68: | ||
+ | </ | ||
+ | </ | ||
+ | ターゲットの PC が起動する。\\ | ||
+ | <WRAP prewrap 100% #result> | ||
+ | <code powershell> | ||
+ | Sending magic packet for: 68: | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== 参考文献 ===== | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[http:// | ||
+ | [[https:// | ||