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