Python 实现远程开机与关机:WOL 魔法数据包详解

Evan
Evan
发布时间:2026-10-14| 3人浏览过
原创

本文介绍如何使用 Python 实现远程开关机功能。远程开机基于 WOL(Wake-On-Lan)技术,通过发送包含目标 MAC 地址的 Magic Packet 广播包唤醒计算机。文章详细解析了网卡供电、端口配置及代码实现,并提供了局域网或公网环境下的关机方案,包括命令行执行与 Flask 服务调用。

Python 远程开关机概述

利用 Python 执行关机操作或许并不陌生,但通过 Python 实现远程开机则相对少见。本文将介绍一种基于网络协议的神奇方法,展示如何使用 Python 代码触发计算机开机。

相关 GitHub 仓库地址:

https://github.com/injetlee/Python/tree/master/Python%20%E9%BB%91%E9%AD%94%E6%B3%95

本文目标

  • 远程开机原理
  • Python 远程开机代码实现
  • Python 关机说明

Python 远程开机实现

Python 开机

程序实现开机的核心在于 WOL(Wake-On-Lan,局域网唤醒)技术。该机制利用计算机在关机或休眠状态下,主板与网卡仍保持微弱供电的特性(前提是电源已连接且使用有线网络)。此时网卡具备监听外部广播信息的能力,一旦接收到特定格式的数据包,便会触发开机指令。目前主流主板均支持此功能。

只需在网络适配器属性中配置以下两个选项即可启用相关功能。

注意,图中所示的勾选选项不应选中。我们需要确保网卡在关机后仍保持供电状态,具体表现为关机后网口指示灯依然亮起。若指示灯熄灭,则无法实现远程唤醒。

这种特定格式的数据包被称为 Magic Packet(魔法数据包),通常通过 UDP 协议进行广播,端口号一般为 7 或 9。Magic Packet 的结构以连续 6 个 "FF FF FF FF FF FF" 开头,随后紧跟目标计算机的 MAC 地址信息。网卡侦测到该数据包内容后,即执行开机操作。

接下来查看具体代码实现。该部分涉及 UDP 网络编程,后续章节将专门探讨网络编程相关内容。此函数仅需输入目标计算机的 MAC 地址即可运行。在局域网环境中(若拥有公网 IP,亦可应用于公网),在另一台计算机上执行此程序,目标计算机即可自动开机。

具体代码如下,代码逻辑简洁,原理直观:


def wake_up(mac='DC-4A-3E-78-3E-0A'):
  MAC = mac
  BROADCAST = "192.168.0.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)

Python 远程关机方案

Python 关机

相比之下,远程关机更为简单,网上已有多种现成解决方案。常见方法是通过程序扫描邮箱,若收到包含关机关键词的邮件,则自动执行关机命令。此外,若仅在局域网内操作,或拥有公网 IP,也可在本地计算机启动服务(例如使用 Flask 运行在 5000 端口),通过向该地址发送指令来触发关机。本机程序中只需包含执行关机的命令即可。


import os
os.system('shutdown -s -t 00')

以上即为 Python 远程开关机方法的详细内容,更多关于 python 远程开关机的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。