使用Python实现Wake On Lan远程开机功能


Posted in Python onJanuary 22, 2020

Wake-On-LAN简称WOL,是一种电源管理功能;如果存在网络活动,则允许设备将操作系统从待机或休眠模式中唤醒。许多主板厂商支持IBM提出的网络唤醒标准。该标准允许网络管理员远程打开PC机电源,以便进行文件升级、资源跟踪和设备清点等工作。

先看下使用Python实现WakeOn Lan远程开机功能,具体介绍如下:

创建魔法唤醒包

格式化mac地址,生成魔法唤醒包,然后发送包,首先电脑需要打开wake on lan功能

创建main_wake_on_lan.py文件

import socket
import binascii
import struct
import re
'''
格式化mac地址,生成魔法唤醒包,然后发送。
mac格式: mac = A1B2C3D4E5F6
唤醒包格式: send_data = binascii.unhexlify('FF'*6 + str(mac)*16)
'''
MAC = "18:31:BF:B0:36:8F"

# MAC = "98-90-96-C1-FE-CB"

# 格式化MAC地址989096C1FECB为这种形式
def format_mac0(mac):
 if len(mac) == 12:
  pass
 elif len(mac) == 17:
  if mac.count(':') == 5 or mac.count('-') == 5:
   sep = mac[2]
   mac = mac.replace(sep, '')
  else:
   raise ValueError('Incorrect MAC format')
 else:
  raise ValueError('Incorrect MAC format')
 return mac
def format_mac(mac):
 mac_re = re.compile(r'''
      (^([0-9A-F]{1,2}[-]){5}([0-9A-F]{1,2})$
      |^([0-9A-F]{1,2}[:]){5}([0-9A-F]{1,2})$
      |^([0-9A-F]{1,2}[.]){5}([0-9A-F]{1,2})$
      )''', re.VERBOSE | re.IGNORECASE)
 # print(re.match(mac_re, mac))
 if re.match(mac_re, mac):
  if mac.count(':') == 5 or mac.count('-') == 5 or mac.count('.'):
   sep = mac[2]
   mac_fm = mac.replace(sep, '')
   return mac_fm
 else:
  raise ValueError('Incorrect MAC format')

# 方法一:将989096C1FECB格式的mac地址创建唤醒包
def create_magic_packet0(mac):
 data = b'FF' * 6 + (mac * 16).encode()
 print(data)

 print(type(data))
 send_data = b''
 for i in range(0, len(data), 2):
  send_data = send_data + struct.pack(b'B', int(data[i: i + 2], 16)) # int(data[i: i+2], 16) 把16进制转换成整数
 print(type(send_data))
 return send_data
# 方法二:将989096C1FECB格式的mac地址创建唤醒包,使用binascii.unhexlify()方法
def create_magic_packet(mac):
 data = 'FF' * 6 + str(mac) * 16
 # print(data)
 # print(type(data))
 send_data = binascii.unhexlify(data)
 # print(type(send_data))
 return send_data
def send_magic_packet(send_data):
 # broadcast_address = '192.168.255.255'
 broadcast_address = '255.255.255.255'
 port = 9
 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
 s.sendto(send_data, (broadcast_address, port))
if __name__ == '__main__':
 # print('mac地址:', format_mac(MAC))
 mac = format_mac(MAC)
 send_data = create_magic_packet(mac)
 # print(send_data)
 send_magic_packet(send_data)

调用发包函数

创建main_boot_computer.py

import main_wake_on_lan
import sys


def boot_computer():
 try:
  pyname, parameter = sys.argv
  if parameter == '-h':
   print('参数使用方法:python3 main_boot_computer.py mac地址\npython3 main_boot_computer.py 98:90:96:C1:FE:CB')
  else:
   print('正在向 ', parameter, ' 发送魔法唤醒包!')
   # mac = '98:90:96:C1:FE:CB'

   mac = main_wake_on_lan.format_mac(parameter)
   send_data = main_wake_on_lan.create_magic_packet(mac)

   main_wake_on_lan.send_magic_packet(send_data)
   return '成功向' + parameter + '发送唤醒包!'
 except ValueError:
  print('未收到传入的参数\n获取帮助:python3 main_boot_computer.py -h')

if __name__ == '__main__':
 boot_computer()

使用方法

python3 main_boot_computer.py mac地址

补充:python通过wakeonlan唤醒内网电脑开机

首先需要pip3 install wakeonlan

然后在电脑需要你的网卡支持网络唤醒计算机。

然后在主板BIOS开启支持唤醒。

在系统网卡属性里选上“允许计算机关闭此设备以节约电源”,“允许此设备唤醒计算机”

然后以下就是python代码,非常简单。

from wakeonlan import send_magic_packet
send_magic_packet('4d.2d.6b.12.9b.1f')

总结

以上所述是小编给大家介绍的使用Python实现Wake On Lan远程开机功能,希望对大家有所帮助!

Python 相关文章推荐
Python实现对字符串的加密解密方法示例
Apr 29 Python
浅谈numpy数组的几种排序方式
Dec 15 Python
python3 判断列表是一个空列表的方法
May 04 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
Jun 13 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
python查看文件大小和文件夹内容的方法
Jul 08 Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 Python
Python模拟登录之滑块验证码的破解(实例代码)
Nov 18 Python
pycharm设置当前工作目录的操作(working directory)
Feb 14 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
Apr 10 Python
python实现测试工具(二)——简单的ui测试工具
Oct 19 Python
Opencv+Python识别PCB板图片的步骤
Jan 07 Python
python定义类self用法实例解析
Jan 22 #Python
通过实例解析python描述符原理作用
Jan 22 #Python
python基于property()函数定义属性
Jan 22 #Python
Python @property装饰器原理解析
Jan 22 #Python
Python底层封装实现方法详解
Jan 22 #Python
tensorboard实现同时显示训练曲线和测试曲线
Jan 21 #Python
使用tensorboard可视化loss和acc的实例
Jan 21 #Python
You might like
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
javawscript 三级菜单的实现原理
2009/07/01 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
js实现按座位号抽奖
2017/04/05 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
详解vue3中组件的非兼容变更
2021/03/03 Vue.js
[07:25]DOTA2-DPC中国联赛2月5日Recap集锦
2021/03/11 DOTA
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
python监控进程脚本
2018/04/12 Python
基于树莓派的语音对话机器人
2019/06/17 Python
Python文件路径名的操作方法
2019/10/30 Python
浅谈在JupyterNotebook下导入自己的模块的问题
2020/04/16 Python
2014年迎新年联欢会活动策划方案
2014/02/26 职场文书
销售经理岗位职责
2014/03/16 职场文书
任命书范本大全
2014/06/06 职场文书
公司感谢信范文
2015/01/22 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
党员个人自我评价
2015/03/03 职场文书
2016春节慰问信范文
2015/03/25 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书
开发一个封装iframe的vue组件
2021/03/29 Vue.js
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python
SQL Server Agent 服务无法启动
2022/04/20 SQL Server