python:socket:programming

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
python:socket:programming [2020/05/30 18:38] ともやんpython:socket:programming [2021/06/25 15:48] (現在) ともやん
行 1: 行 1:
-<html> 
-  <style> 
-    #result pre, #mincode pre { 
-      overflow: hidden; 
-      font-size: 10px; 
-    } 
-    #result_long pre { 
-      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: white; 
-      padding: 10px; 
-      width: fit-content; 
-    } 
-    #logo p { 
-      margin: 0; 
-    } 
-  </style> 
-</html> 
 ====== Python ソケット プログラミング ====== ====== Python ソケット プログラミング ======
 +
 +===== Python で Wake on LAN のマジックパケットを送信する =====
 +[[wpjp>Wake-on-LAN|Wake-on-LAN - Wikipedia]]\\
 +
 +<WRAP prewrap 100% #mincode>
 +<code python>
 +#!/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>'
 +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()
 +</code>
 +</WRAP>
 +
 +**実行例:**\\
 +<WRAP prewrap 100%>
 +<code powershell>
 +$ python wol.py
 +</code>
 +</WRAP>
 +<WRAP prewrap 100% #result>
 +<code powershell>
 +usage: wol.py [-h] [-p port] mac_address
 +wol.py: error: the following arguments are required: mac_address
 +</code>
 +</WRAP>
 +
 +<WRAP prewrap 100%>
 +<code powershell>
 +$ python wol.py -h
 +</code>
 +</WRAP>
 +<WRAP prewrap 100% #result>
 +<code powershell>
 +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.
 +</code>
 +</WRAP>
 +
 +ターゲットの MAC address にマジックパケットを送信する。\\
 +<WRAP prewrap 100%>
 +<code powershell>
 +$ python wol.py 68:96:7b:07:21:55
 +</code>
 +</WRAP>
 +ターゲットの PC が起動する。\\
 +<WRAP prewrap 100% #result>
 +<code powershell>
 +Sending magic packet for: 68:96:7B:07:21:55, broadcast port is 7 ...
 +</code>
 +</WRAP>
  
 ===== 参考文献 ===== ===== 参考文献 =====
 [[https://kapibara-sos.net/archives/853|PythonでWake-on-lan]]\\ [[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]]\\
  
  • python/socket/programming.1590831487.txt.gz
  • 最終更新: 2020/05/30 18:38
  • by ともやん