摘要:大多數(shù)是用程序掃描郵箱,如果收到關(guān)機(jī)相關(guān)關(guān)鍵詞的郵件,則程序自動執(zhí)行關(guān)機(jī)命令。本機(jī)程序中需要有一條執(zhí)行關(guān)機(jī)的命令即可
用 Python 關(guān)機(jī)你肯定聽過或者實(shí)踐過,那么用 Python 開機(jī)呢?這是一個神奇的方法,教你如何用 Python 來開機(jī)。
GitHub 倉庫地址:https://github.com/injetlee/Python/tree/master/Python%20%E9%BB%91%E9%AD%94%E6%B3%95
本文目標(biāo)遠(yuǎn)程開機(jī)原理
Python 遠(yuǎn)程開機(jī)代碼實(shí)現(xiàn)
Python 關(guān)機(jī)說明
Python 開機(jī)關(guān)于用程序來開機(jī),是怎么做到的呢?這就是 WOL 技術(shù) Wake-On-Lan, 利用計算機(jī)在關(guān)機(jī)或休眠狀態(tài)時,網(wǎng)卡及主板部分仍然有微弱的供電,當(dāng)然要保持電源是插上的,而且是有線連接。所以即使在關(guān)機(jī)情況下,網(wǎng)卡還是有一定運(yùn)作能力的,可以監(jiān)聽計算機(jī)外部的網(wǎng)上廣播信息,當(dāng)發(fā)現(xiàn)特定格式的信息后就會執(zhí)行開機(jī)?,F(xiàn)在的主板基本都支持。
只需要在網(wǎng)絡(luò)適配器屬性中配置下面兩個選項
下圖這個勾不能選上,我們要保證網(wǎng)卡在關(guān)機(jī)后仍有供電,如果你關(guān)機(jī)后,網(wǎng)口的燈不亮了,就不行了,要保持網(wǎng)口燈亮。
這個特定數(shù)據(jù)也有個好聽的名字叫 Magic Packet(魔法數(shù)據(jù)包)。一般用過 UDP 協(xié)議進(jìn)行廣播。端口一般是7或者9. 魔法數(shù)據(jù)包總是以"FF FF FF FF FF FF" 連續(xù)6個 "FF",后面是 MAC 地址信息,一旦網(wǎng)卡偵測到數(shù)據(jù)包內(nèi)容,就會喚醒目標(biāo)計算機(jī)。
我們還是來看一下代碼怎么寫,代碼涉及到 UDP 網(wǎng)絡(luò)編程這塊,后面會專門寫寫網(wǎng)絡(luò)編程這塊內(nèi)容。
此函數(shù)只需輸入目標(biāo)計算機(jī)的 MAC 地址即可,在局域網(wǎng)中(當(dāng)然,如果你的計算機(jī)有公網(wǎng)IP,那么在公網(wǎng)中也是可以的)另一臺計算機(jī)上運(yùn)行此程序,目標(biāo)計算機(jī)即可自動開機(jī)。
代碼如下,代碼本身很短,原理也很簡單:
import socket import struct 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]) # 構(gòu)造原始數(shù)據(jù)格式 send_data = b"" # 把原始數(shù)據(jù)轉(zhuǎn)換為16進(jìn)制字節(jié)數(shù)組, 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)) # return HttpResponse() print("Done") except Exception as e: # return HttpResponse() print(e)Python 關(guān)機(jī)
關(guān)機(jī)來說相對就容易多了,網(wǎng)上也有很多現(xiàn)成的解決方案。大多數(shù)是用程序掃描郵箱,如果收到關(guān)機(jī)相關(guān)關(guān)鍵詞的郵件,則程序自動執(zhí)行關(guān)機(jī)命令。
另外如果只是在局域網(wǎng)里實(shí)現(xiàn)關(guān)機(jī),或者你有公網(wǎng) IP 地址的話,也可以在本地計算機(jī)起一個服務(wù),比如用 Flask 運(yùn)行在5000端口。向5000這個地址發(fā)送指令即可。
本機(jī)程序中需要有一條執(zhí)行關(guān)機(jī)的命令即可
import os os.system("shutdown -s -t 00")
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44837.html
摘要:根據(jù)中華人民共和國信息產(chǎn)業(yè)部第十二次部務(wù)會議審議通過的非經(jīng)營性互聯(lián)網(wǎng)信息服務(wù)備案管理辦法精神,在中華人民共和國境內(nèi)提供非經(jīng)營性互聯(lián)網(wǎng)信息服務(wù),應(yīng)當(dāng)辦理備案。未經(jīng)備案,不得在中華人民共和國境內(nèi)從事非經(jīng)營性互聯(lián)網(wǎng)信息服務(wù)。 當(dāng)我們開發(fā)了一個簡單的 Flask 程序,想把項目部署上線,我們可以選擇傳統(tǒng)的部署方式或者云部署方式把項目部署上線。在本文中,筆者將使用 阿里云輕量應(yīng)用服務(wù)器 安裝 C...
摘要:前面億元程序員傾心為我們講解網(wǎng)絡(luò)喚醒的配置方法實(shí)現(xiàn)遠(yuǎn)程開機(jī),有的小伙伴就很苦惱了這也太麻煩了吧所以,有沒有其他簡單的遠(yuǎn)程開機(jī)方法呢下面,我們跟隨億元程序員來一起看下。需要開啟網(wǎng)絡(luò)喚醒功能。不過最后還是推薦網(wǎng)絡(luò)喚醒,一次配置,一直受用。 ...
摘要:作者運(yùn)維博客博客地址文章地址相關(guān)話題是近兩年來發(fā)展較快,比較活躍,非常清新的一個管理平臺,提供對宿主機(jī)和虛機(jī)的統(tǒng)一管理,它有別于自帶的圖形管理工具,讓管理變得更為可視化,對中小型應(yīng)用場景帶來了更多方便。作者:SRE運(yùn)維博客博客地址: https://www.cnsre.cn/文章地址:https://www.cnsre.cn/posts/211117937177/相關(guān)話題:https://w...
閱讀 2076·2019-08-30 15:53
閱讀 3073·2019-08-30 15:44
閱讀 2920·2019-08-30 14:11
閱讀 2916·2019-08-30 14:01
閱讀 2705·2019-08-29 15:16
閱讀 3751·2019-08-29 13:10
閱讀 1249·2019-08-29 10:56
閱讀 2532·2019-08-26 13:58