zoukankan      html  css  js  c++  java
  • Python实现远程开关机【高薪必备技术】

    用 Python 关机你肯定听过或者实践过,那么用 Python 开机呢?这是一个神奇的方法,教你如何用 Python 来开机。

    PS注意:很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。为此小编建了个Python全栈免费解答.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还有免非最新Python教程下载,,一起相互监督共同进步!

    本文目标

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

    Python 开机

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

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

     
    0.png
     
    1.png

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

     
    2.png

    这个特定数据也有个好听的名字叫 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全栈免费解答.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还有免非最新Python教程下载,,一起相互监督共同进步!

    本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

  • 相关阅读:
    iOS 面试题搜集
    iOS 常用第三方类库、完整APP示例
    iOS 键盘遮挡输入 解决办法
    iOS UIColor RGB HEX
    iOS APP性能优化
    iOS Swift 数组 交换元素的两种方法
    iOS CoreData primitive accessor
    iOS Start developing ios apps (OC) pdf
    iOS 传值方式
    iOS IB_DESIGNABLE IBInspectable @IBDesignable @IBInspectable 加速UI开发
  • 原文地址:https://www.cnblogs.com/chengxuyuanaa/p/12508697.html
Copyright © 2011-2022 走看看