有時候需要遠端家裡的臺式機使用,因為我平時都是用 MAC 多,但是遠端喚醒只能針對區域網,比較麻煩,於是我想用微信實現遠端喚醒機器。
準備工作
本程式主要是實現遠端管理 Windows10作業系統的開機和關機:
- 在 Windows機器的相同內網中放一個 Linux 主機,我這裡用樹莓派代替,如果你是用 OpenWrt 之類的路由器也可以。
- Linux 主機需要能夠遠端訪問,我這裡是有 FRP 將樹莓派的埠對映到我的公網 Linux 主機上。所以可以隨時遠端 SSH 過去。
- Windows 機器的網絡卡必須是有線連線,支援網路喚醒功能。
開機實現思路
首先透過微信傳送開機指令,這裡我使用的是 itchat 程式會呼叫 Paramiko 庫去 SSH 遠端到內網的樹莓派執行 WakeOnLan 命令去喚醒 Windows 主機。
程式會透過 ICMP 協議, ping 下需要喚醒的標的主機然後進行過濾,一個正常的 ICMP 包是64位元組,過濾打印出這個64。
例如 ping 百度:
用一段 Linux 命令去過濾是否有64,這裡為啥要用 head -n 1 呢?
因為有可能會出現2行,經過測試,我們只需要取64這個值就可以了:
如果有則表示開機成功已經聯網了,傳回開機成功,否則程式繼續往下走,去喚醒,然後在 ping 一次確認是否開機,如果為是則傳回開機成功,否則傳回失敗。程式執行成功後,在我的網站根目錄建立一個 shutdown 檔案,用於後面的關機操作:
關機部分實現
當接收關機指令時,程式會去刪除網站根目錄的 shutdown 檔案,客戶端我寫了幾行程式碼,去透過 Requests 庫每隔30s 傳送 HTTP head 請求去判斷檔案是否是404,如果是404 這說明檔案不存在,呼叫系統關機操作,執行關機。
然後 SSH 到樹莓派去 ping 標的主機,如果傳回為空,則說明關機成功,否則關機失敗。這隻是針對 Windows 的關機,如果標的主機是 Linux 則簡單多了:
客戶端程式碼,寫完扔計劃任務,開機啟動:
使用 TeamViewer 連線:
缺點
- 網頁端微信必須一直登入,不方便,這個就需要微信不能斷網了。
- WakeOnLan 是廣播 MAC 地址的,貌似不能傳回是否成功沒,所以還是要 ping 主機看看通不通,判斷下。
- 需要一個樹莓派做跳板機,否則也不能喚醒內網裝置。
- 如果只允許自己控制最好是使用檔案助手來傳送訊息,因為預設情況下,任何人都可以給你傳送指令開機。
- Windows需要安裝TeamViewer並且設定為開機自動啟動以及系結賬號設定無人值守樣式。這樣方便遠端,如果是Linux 則不需要開啟 ssh 就可以了。
原始碼地址私信加小編QQ群:696541369即可免費獲取+python學習資料!