在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()