使用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()

 

posted @ 2022-02-10 23:53  ken-yu  阅读(1751)  评论(0编辑  收藏  举报