差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| python:socket:programming [2020/05/30 18:38] – ともやん | python:socket:programming [2021/06/25 15:48] (現在) – ともやん | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | < | ||
| - | < | ||
| - | #result pre, #mincode pre { | ||
| - | overflow: hidden; | ||
| - | font-size: 10px; | ||
| - | } | ||
| - | # | ||
| - | height: 250px; | ||
| - | overflow: scroll; | ||
| - | overflow-x: hidden; | ||
| - | font-size: 10px; | ||
| - | } | ||
| - | #mintbl table { | ||
| - | font-size: 12px; | ||
| - | } | ||
| - | #mintbl td pre { | ||
| - | margin: 0; | ||
| - | } | ||
| - | #img_long { | ||
| - | height: 400px; | ||
| - | overflow: scroll; | ||
| - | overflow-x: hidden; | ||
| - | } | ||
| - | .dokuwiki .plugin_wrap table { | ||
| - | width: auto; | ||
| - | } | ||
| - | #logo { | ||
| - | background-color: | ||
| - | padding: 10px; | ||
| - | width: fit-content; | ||
| - | } | ||
| - | #logo p { | ||
| - | margin: 0; | ||
| - | } | ||
| - | </ | ||
| - | </ | ||
| ====== 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:// | ||
| + | [[https:// | ||
| + | [[http:// | ||
| + | [[https:// | ||