远程Windows开机实现之前已经使用Java实现过了(详情见《远程Windows开机:WoL(Wake-on-Lan)客户端Java实现》),现在使用Python重新实现,当然,需要重新复习下网络唤醒的原理:
借助WoL技术(Wake-on Lan)可以将电脑远程开机,关于Wol,可以参考维基百科:《网络唤醒》 。它的基本原理就是支持Wol技术的网卡在电脑关机之后,网卡还有微弱的供电,当它发现网络广播的内容中有特定的“魔法数据包”,并且经过解析发现它所指的地址是自身所处的电脑时,网卡就会通知机内的主板、电源供应器,开始进行开机(或唤醒)的程序。
具体来说,只要发送特定格式的UDP广播数据包到子网中,就能将计算机唤醒,数据包格式:
FF FF FF FF FF FF FF | MAC 地址 × 16 | 4-6字节的密码(可空) |
---|
完整Python代码如下:
import socket
import os
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 启用广播
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
data = "FFFFFFFFFFFF" + "58112208850B" * 16 + "000000000000"
s.sendto(bytes.fromhex(data), ('192.168.3.255', 9))
s.close()
os.system("pause")
if __name__ == '__main__':
pass
可以看到Python版本的代码非常简洁,而且作为脚本语言不需要编译打包,直接复制到桌面上就可以随时用了,Python是天下第一好的编程语言!(对不起Java,我叛变了)
注意:本文归作者所有,未经作者允许,不得转载