Python远程开关机
一、远程开机
- Python开机使用WOL技术即Wake-On-Lan,利用计算机在关机或休眠状态下,网卡及主板部分仍然有微弱的供电,当然需要保持电源供电,而且是有线连接。所以即便在关机状态下,网卡其实还是能够有一定的运作能力的,可以监听到计算机的网上广播信息,当发现特定格式的信息后就会执行开机。现在的主板基本都支持,只要在网络适配器属性中配置以太网属性勾选Microsoft网络客户端,在配置页面中启用唤醒魔包,电池管理允许计算机关闭此设备以节约电源不勾选。魔法数据包一般通过UDP进行广播,端口号一般是7或者9,魔法数据包总是以连续6个"FF",后面是MAC地址信息,一旦网卡侦测到数据包内容,就会唤醒目标计算机。
- 代码实现
import struct
import socket
import time
#通过ipconfig可以获得mac地址、IP地址
def wake_up(mac='XX-XX-XX-XX-XX-XX'):
MAC = mac
BROADCAST = 'xx.xx.xx.xx'
if len(MAC) != 17:
raise ValueError('MAC地址输入错误!')
mac_address = MAC.replace('-', '')
data = ''.join(['FFFFFFFFFFFF', mac_address * 20])
send_msg = b''
for i in range(0, len(data), 2):
send_data = b''.join([send_data, struct.pack('B', int(data[i:i+2], 16))])
# 使用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.reason)
二、远程关机
-
远程关机实现较为简单,只需要启用一个服务,能够发送关机对应指令就行。
-
实现代码
import os
os.system("shutdown -s -t 60") # 关机
os.system("shutdonw -r -t 100") # 重启