使用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实现读取目录所有文件的文件名并保存到txt文件代码
Nov 22 Python
python队列通信:rabbitMQ的使用(实例讲解)
Dec 22 Python
python根据unicode判断语言类型实例代码
Jan 17 Python
PyCharm+PySpark远程调试的环境配置的方法
Nov 29 Python
python之cv2与图像的载入、显示和保存实例
Dec 05 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
Dec 24 Python
Python子类继承父类构造函数详解
Feb 19 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
Jul 08 Python
python GUI模拟实现计算器
Jun 22 Python
如何利用Python动态模拟太阳系运转
Sep 04 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
Mar 22 Python
利用For循环遍历Python字典的三种方法实例
Mar 25 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
PHP个人网站架设连环讲(四)
2006/10/09 PHP
PHP 文件上传全攻略
2010/04/28 PHP
php漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
Javascript remove 自定义数组删除方法
2009/10/20 Javascript
dojo学习第二天 ajax异步请求之绑定列表
2011/08/29 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
js实现右键菜单功能
2016/11/28 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
jQuery实现简单全选框
2020/09/13 jQuery
Python下Fabric的简单部署方法
2015/07/14 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
解决pycharm中导入自己写的.py函数出错问题
2020/02/12 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
在Python中实现字典反转案例
2020/12/05 Python
详解HTML5将footer置于页面最底部的方法(CSS+JS)
2018/10/11 HTML / CSS
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
草莓网官网:StrawberryNET
2019/08/21 全球购物
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
教学大赛获奖感言
2014/01/15 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
正科级干部考察材料
2014/05/29 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
超市食品安全承诺书
2015/04/29 职场文书
2015年扫黄打非工作总结
2015/05/13 职场文书
生日宴会祝酒词
2015/08/10 职场文书
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL