使用Python實現Wake On Lan遠程開機


在A主機上執行Python代碼,喚醒B主機,讓B主機開機,以下內容和代碼親測可用

需要在B主機上進行以下設置。

1,啟用網卡的喚醒功能。
 

 

 

 

 

 

 

可以在 CMD 或 Powershell 中使用 powercfg /a 命令查詢目前系統上所有可用的、硬件可支持的“睡眠”策略:

 

 

 

 

不啟用快速開機是關鍵

 
A主機上執行下面的Python代碼就可以遠程喚醒B主機。
 
python發送網絡喚醒的代碼如下:
需要修改的只有下面的 Mac 地址和  發廣播的局域網廣播地址
wake_up(mac='CC-33-55-66-AA-21'):    這里的 “CC-33-55-66-AA-21” 是B主機的MAC地址。
BROADCAST = "192.168.31.255"  這里是局域網發廣播的地址。
 
import socket
import time
import struct

def wake_up(mac='CC-33-55-66-AA-21'):
    MAC = mac
    BROADCAST = "192.168.31.255"
    if len(MAC) != 17:
        raise ValueError("MAC address should be set as form 'XX-XX-XX-XX-XX-XX'")
    mac_address = MAC.replace("-", '')
    data = ''.join(['FFFFFFFFFFFF', mac_address * 20])  # 構造原始數據格式
    send_data = b''
 
    # 把原始數據轉換為16進制字節數組,
    for i in range(0, len(data), 2):
        send_data = b''.join([send_data, struct.pack('B', int(data[i: i + 2], 16))])
    # print(send_data)
 
    # 通過socket廣播出去,為避免失敗,間隔廣播三次
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
        sock.sendto(send_data, (BROADCAST, 7))
        time.sleep(1)
        sock.sendto(send_data, (BROADCAST, 7))
        time.sleep(1)
        sock.sendto(send_data, (BROADCAST, 7))
        print("Done")
    except Exception as e:
        print(e)

wake_up()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM