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 开机

关于用程序来开机,是怎么做到的呢?这就是 WOL 技术 Wake-On-Lan, 利用计算机在关机或休眠状态时,网卡及主板部分仍然有微弱的供电,当然要保持电源是插上的,而且是有线连接。所以即使在关机情况下,网卡还是有一定运作能力的,可以监听计算机外部的网上广播信息,当发现特定格式的信息后就会执行开机。现在的主板基本都支持。

只需要在网络适配器属性中配置下面两个选项

下图这个勾不能选上,我们要保证网卡在关机后仍有供电,如果你关机后,网口的灯不亮了,就不行了,要保持网口灯亮。

这个特定数据也有个好听的名字叫 Magic Packet(魔法数据包)。一般用过 UDP 协议进行广播。端口一般是7或者9. 魔法数据包总是以"FF FF FF FF FF FF" 连续6个 "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 关机

关机来说相对就容易多了,网上也有很多现成的解决方案。大多数是用程序扫描邮箱,如果收到关机相关关键词的邮件,则程序自动执行关机命令。
另外如果只是在局域网里实现关机,或者你有公网 IP 地址的话,也可以在本地计算机起一个服务,比如用 Flask 运行在5000端口。向5000这个地址发送指令即可。
本机程序中需要有一条执行关机的命令即可

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

以上就是Python 远程开关机的方法的详细内容,更多关于python 远程开关机的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)

    0. 我们如何通过邮件系统完成远程控制电脑(关机.重启等)? 实现思路: 需要有两个邮箱:接收指令邮箱(A)发送指令邮箱(B) 被控制的电脑(查看 A 邮箱): 1. 每隔指定时间监听 A 邮箱 查看最近的邮件 2. 打开最近邮件,看是否是 B 邮箱地址发来的执行命令 3. 向 A 和 B 邮箱都发送 主题为:反馈 内容为:"目标计算机已收到指令!开始执行:xxx 指令!" 邮件 4. 执行指定邮箱发送的执行命令 远程人员操作: 登录 B 邮箱,向 A 邮箱发送 主题为:"目

  • Windows系统配置python脚本开机启动的3种方法分享

    测试环境:windows Server 2003 R2 一.开始菜单启动项实现 用户必须登录才可执行. 测试脚本(python代码): 复制代码 代码如下: import time fout = open('e:\\1.txt','w') while True:     tmp = '%d-%02d-%02d %02d:%02d:%02d \r\n' % time.localtime()[0:6]     print tmp     fout.write(tmp)     fout.flush(

  • Python 使用 PyQt5 开发的关机小工具分享

    前两天简单认识了一下PyQt5,通过练习开发了一款在Window下自定义关机的小工具, 代码如下: import os,sys,time from PyQt5 import QtCore,QtWidgets,QtGui class guanji(object): def pageShow(self,page): #设置窗口的位置和大小 page.setGeometry(400,400,400,200) #设置窗口的标题 page.setWindowTitle('Window shutdown')

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

    Wake-On-LAN简称WOL,是一种电源管理功能:如果存在网络活动,则允许设备将操作系统从待机或休眠模式中唤醒.许多主板厂商支持IBM提出的网络唤醒标准.该标准允许网络管理员远程打开PC机电源,以便进行文件升级.资源跟踪和设备清点等工作. 先看下使用Python实现WakeOn Lan远程开机功能,具体介绍如下: 创建魔法唤醒包 格式化mac地址,生成魔法唤醒包,然后发送包,首先电脑需要打开wake on lan功能 创建main_wake_on_lan.py文件 import socket

  • python打包exe开机自动启动的实例(windows)

    一.背景 简单的写个.exe程序,没必要去学习mfc.c++等,可以学习python.python可以轻易的调用windows的api,轻松的实现你想干的事.下面就是实现打包的exe文件开机自动运行. 二.实现 #!/usr/bin/python # -*- coding: UTF-8 -*- import win32api import win32con class AutoRun(): def __init__(self): name = 'translate' # 要添加的项值名称 pat

  • python脚本开机自启的实现方法

    问题描述:将python脚本设置成开机自启. 环境:windows7 64位 前段时间,一直想把文件打包成exe文件,然后设置成开机自启,虽然感觉很装逼,但是使用pyinstaller打包成exe文件的历程却是非常坎坷,一改脚本或者导入一个新的库,打包就出现各种报错,各种问题,最后博主实在找不到解决办法之后放弃了,谁知突然间却看到有博客说能直接把py程序设成开机自启,真是开心,下面说明一下操作步骤: (1)首先,需要新建一个.bat文件(用来运行脚本),格式如下,红色部分为python脚本的位置

  • python自动循环定时开关机(非重启)测试

    做手机整机测试的,肯定有开关机的需求,关机,几分钟后再开机(一直循环操作测试,就是不能重启):这个需求在关机后就没有办法开机了,任何脚本命令都不行,除非做APP:重启功能的缺点是关机后就立即开机了,需求是关机后几分钟才开机,reboot做不到: 基本思路:现在借用终端自带的定时开关机APP功能,定时开关机只能定时一天就一个时间,达不到这个目的,这个APP作为辅助,关机后几分钟自动开机,开机后更改系统时间或者定时开关机APP时间,来达到测试多次开关机功能 废话不多说,来看看脚本怎么写 # -*-

  • python得到电脑的开机时间方法

    如下所示: #先下载psutil库:pip install psutil import psutil import os,datetime def main(): print "电脑的开机时间", #调用psutil.boot_time()函数返回开机的时间戳 dt = datetime.datetime.fromtimestamp(psutil.boot_time()) #返回一个datetime对象 print dt.strftime("%Y-%m-%d,%H:%M:%S

  • Python 实现Windows开机运行某软件的方法

    开机运行:随系统启动的应用程序,当系统启动之后会自动加载的应用 在注册表中添加启动项便可实现开机启动. 代码如下: # -*- coding:utf-8 -*- import win32api import win32con name = 'oftpublic' # 要添加的项值名称 path = 'C:\softpublic.exe' # 要添加的exe路径 # 注册表项名 KeyName = 'Software\\Microsoft\\Windows\\CurrentVersion\\Run

  • 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 开机 关于用程序来开机,是怎么做到的呢?这就是 WOL 技术 Wake-On-La

  • python使用paramiko实现远程拷贝文件的方法

    本文实例讲述了python使用paramiko实现远程拷贝文件的方法.分享给大家供大家参考,具体如下: 首先是安装paramiko库(其实现了SSH2安全协议),ubuntu下可直接通过源安装: sudo apt-get install python-paramiko 接下来是代码实现远程下载: def remote_scp(host_ip,remote_path,local_path,username,password): t = paramiko.Transport((host_ip,22)

  • python使用socket远程连接错误处理方法

    本文实例讲述了python使用socket远程连接错误处理方法.分享给大家供大家参考.具体如下: import socket, sys host = sys.argv[1] textport = sys.argv[2] filename = sys.argv[3] try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error, e: print "Strange error creating sock

  • Python实现远程调用MetaSploit的方法

    本文较为详细的讲述了Python实现远程调用MetaSploit的方法,对Python的学习来说有很好的参考价值.具体实现方法如下: (1)安装Python的msgpack类库,MSF官方文档中的数据序列化标准就是参照msgpack. root@kali:~# apt-get install python-setuptools root@kali:~# easy_install msgpack-python (2)创建createdb_sql.txt: create database msf;

  • Python基于sftp及rsa密匙实现远程拷贝文件的方法

    本文实例讲述了Python基于sftp及rsa密匙实现远程拷贝文件的方法.分享给大家供大家参考,具体如下: 如果两台服务器之间使用了RSA秘钥免密码登录的方式,可以先查找出rsa秘钥的对应目录(如find / -name id_rsa 或者locate id_rsa), 接着通过Python中paramiko模块可以这样实现scp功能: def scp_by_key(host_ip, host_port, remote_path, local_path, username, pkey_path)

  • python利用跳板机ssh远程连接redis的方法

    公司服务器的mysql和redis连接都需要有跳板机,网上有很多python ssh远程连接mysql的,那天我研究了下,利用sshtunnel模块连接上了redis,具体如下: from sshtunnel import SSHTunnelForwarder # ssh连接库 import redis # redis模块 server = SSHTunnelForwarder( ssh_address_or_host= , # ssh地址 ssh_username= , # ssh连接的用户名

  • python远程调用rpc模块xmlrpclib的方法

    RPC(Remote Procedure Call Protocol)是远程调用协议,它通过网络请求服务到远端服务器,服务器根据请求做出响应,将结果返回 它是一种C/S模式,客户端可以调用远程服务器上的参数(类似URL)并返回结果 利用rpc可以实现系统的分布式架构,可以将功能分解到多台服务器上进行实现,同时也将也可以将负载打散,分布到不同服务器上,整合计算资源 在openstack中就大量使用了rpc rpc多使用http传输请求,格式有xml,json等,这里是xml 模块: xmlrpcl

  • python pexpect ssh 远程登录服务器的方法

    使用了python中的pexpect模块,在测试代码之前,可输入python进入交互界面,输入help('pexpect'),查询是否本地含有pexpect模块. 如果没有,linux系统输入 easy_install pexpect便可自动安装. 测试代码,连接127.0.0.1 下面是我手动连接127.0.0.1, 发现只有在首次使用ssh连接127.0.0.1时,需要输入yes or no ,而后再次使用ssh ,则不需要再次输入yes 直接输入密码即可. 后续测试代码是二次链接,无需查询

  • 使用python Fabric动态修改远程机器hosts的方法

    一.关于fabric fabric是一个很强大的包,可以将多机操作.部署的命令固化到脚本里面, 详情可参考文档 http://fabric-chs.readthedocs.io/zh_CN/chs/ 二.修改远程hosts的方法 如何修改远程服务器的hosts,想到两个办法: 第一个想到的办法就是通过命令连接上服务器,然后使用编辑器vim或者其它打开hosts文件,进行编辑:这种办法有个明显的缺点就是脚本操作比较复杂,需要在脚本里面使用编辑器进行操作,同时还需要动态解析已有的hosts,进行ho

  • 使用python Telnet远程登录执行程序的方法

    如下所示: # -*-coding:utf-8 -*- def do_telnet(Host, username, password, finish, commands): import telnetlib '''''Telnet远程登录:Windows客户端连接Linux服务器''' # 连接Telnet服务器 tn = telnetlib.Telnet(Host, port=23, timeout=10) tn.set_debuglevel(2) # 输入登录用户名 tn.read_unti

随机推荐