一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python+微信一鍵連接實(shí)現(xiàn)遠(yuǎn)程管理Windows10操作系統(tǒng)的開(kāi)機(jī)和關(guān)機(jī)

電子工程師 ? 來(lái)源:lq ? 2019-02-25 09:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

有時(shí)候需要遠(yuǎn)程家里的臺(tái)式機(jī)使用,因?yàn)槲移綍r(shí)都是用 MAC 多,但是遠(yuǎn)程喚醒只能針對(duì)局域網(wǎng),比較麻煩,于是我想用微信實(shí)現(xiàn)遠(yuǎn)程喚醒機(jī)器。

準(zhǔn)備工作

本程序主要是實(shí)現(xiàn)遠(yuǎn)程管理 Windows10操作系統(tǒng)的開(kāi)機(jī)和關(guān)機(jī):

在 Windows機(jī)器的相同內(nèi)網(wǎng)中放一個(gè) Linux 主機(jī),我這里用樹(shù)莓派代替,如果你是用 OpenWrt 之類的路由器也可以。

Linux 主機(jī)需要能夠遠(yuǎn)程訪問(wèn),我這里是有 FRP 將樹(shù)莓派的端口映射到我的公網(wǎng) Linux 主機(jī)上。所以可以隨時(shí)遠(yuǎn)程 SSH 過(guò)去。

Windows 機(jī)器的網(wǎng)卡必須是有線連接,支持網(wǎng)絡(luò)喚醒功能。

開(kāi)機(jī)實(shí)現(xiàn)思路

首先通過(guò)微信發(fā)送開(kāi)機(jī)指令,這里我使用的是 itchat 程序會(huì)調(diào)用 Paramiko 庫(kù)去 SSH 遠(yuǎn)程到內(nèi)網(wǎng)的樹(shù)莓派執(zhí)行 WakeOnLan 命令去喚醒 Windows 主機(jī)。

pi@raspberrypi:~$wakeonlan-i192.168.1.014:dd:a9:ea:0b:96Sendingmagicpacketto192.168.1.0:9with14:dd:a9:ea:0b:96

程序會(huì)通過(guò) ICMP 協(xié)議, ping 下需要喚醒的目標(biāo)主機(jī)然后進(jìn)行過(guò)濾,一個(gè)正常的 ICMP 包是64字節(jié),過(guò)濾打印出這個(gè)64。

例如 ping 百度:

?~pingwww.baidu.comPINGwww.a.shifen.com(180.97.33.108):56databytes64bytesfrom180.97.33.108:icmp_seq=0ttl=53time=8.865ms64bytesfrom180.97.33.108:icmp_seq=1ttl=53time=9.206ms64bytesfrom180.97.33.108:icmp_seq=2ttl=53time=8.246ms

用一段 Linux 命令去過(guò)濾是否有64,這里為啥要用 head -n 1 呢?

因?yàn)橛锌赡軙?huì)出現(xiàn)2行,經(jīng)過(guò)測(cè)試,我們只需要取64這個(gè)值就可以了:

ping192.168.1.182-c1|grep64|cut-d""-f1|head-n1

如果有則表示開(kāi)機(jī)成功已經(jīng)聯(lián)網(wǎng)了,返回開(kāi)機(jī)成功,否則程序繼續(xù)往下走,去喚醒,然后在 ping 一次確認(rèn)是否開(kāi)機(jī),如果為是則返回開(kāi)機(jī)成功,否則返回失敗。程序執(zhí)行成功后,在我的網(wǎng)站根目錄創(chuàng)建一個(gè) shutdown 文件,用于后面的關(guān)機(jī)操作:

#!/usr/bin/python#-*-coding:utf-8-*-importitchatimportparamikoimportosimporttimeimportsysreload(sys)sys.setdefaultencoding('utf-8')hostname=''username=''port=key_file='/home/fangwenjun/.ssh/id_rsa'filename='/home/fangwenjun/.ssh/known_hosts'@itchat.msg_register(itchat.content.TEXT)deftext_reply(msg):ifmsg['ToUserName']!='filehelper':returnifmsg['Text']==u'開(kāi)機(jī)':paramiko.util.log_to_file('ssh_key-login.log')privatekey=os.path.expanduser(key_file)try:key=paramiko.RSAKey.from_private_key_file(privatekey)exceptparamiko.PasswordRequiredException:key=paramiko.RSAKey.from_private_key_file(privatekey,key_file_pwd)ssh=paramiko.SSHClient()ssh.load_system_host_keys(filename=filename)ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect(hostname=hostname,username=username,pkey=key,port=port)#執(zhí)行喚醒命令stdin,stdout,stderr=ssh.exec_command('ping192.168.1.182-c1|grep64|cut-d""-f1|head-n1')sshCheckOpen=stdout.read()sshCheckOpen=sshCheckOpen.strip(' ')printtype(sshCheckOpen)printsshCheckOpen#進(jìn)行判斷,如果為64,則說(shuō)明ping成功,說(shuō)明設(shè)備已經(jīng)在開(kāi)機(jī)狀態(tài),程序結(jié)束,否則執(zhí)行喚醒ifsshCheckOpen=='64':connect_ok_time=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime())itchat.send(connect_ok_time+u'設(shè)備已經(jīng)開(kāi)機(jī)',toUserName='filehelper')else:ssh_time=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime())itchat.send(ssh_time+u'開(kāi)始連接遠(yuǎn)程主機(jī)',toUserName='filehelper')stdin,stdout,stderr=ssh.exec_command('wakeonlan-i192.168.1.014:dd:a9:ea:0b:96')wakeonlan_time=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime())itchat.send(wakeonlan_time+u'執(zhí)行喚醒,等待設(shè)備開(kāi)機(jī)聯(lián)網(wǎng)',toUserName='filehelper')#由于開(kāi)機(jī)需要一些時(shí)間去啟動(dòng)網(wǎng)絡(luò),所以這里等等60stime.sleep(60)#執(zhí)行ping命令,-c1表示只ping一下,然后過(guò)濾有沒(méi)有64,如果有則獲取64傳給sshConStatusstdin,stdout,stderr=ssh.exec_command('ping192.168.1.182-c1|grep64|cut-d""-f1|head-n1')sshConStatus=stdout.read()sshConStatus=sshConStatus.strip(' ')printtype(sshConStatus)printsshConStatus#進(jìn)行判斷,如果為64,則說(shuō)明ping成功,設(shè)備已經(jīng)聯(lián)網(wǎng),可以進(jìn)行遠(yuǎn)程連接了,否則發(fā)送失敗消息ifsshConStatus=='64':connect_ok_time=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime())itchat.send(connect_ok_time+u'設(shè)備喚醒成功,您可以遠(yuǎn)程連接了',toUserName='filehelper')else:connect_err_time=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime())itchat.send(connect_err_time+u'設(shè)備喚醒失敗,請(qǐng)檢查設(shè)備是否連接電源',toUserName='filehelper')ssh.close()#在網(wǎng)站根目錄創(chuàng)建一個(gè)空文件,命名為shutdownos.system('touch/www/shutdown')print'執(zhí)行開(kāi)機(jī)消息成功'

關(guān)機(jī)部分實(shí)現(xiàn)

當(dāng)接收關(guān)機(jī)指令時(shí),程序會(huì)去刪除網(wǎng)站根目錄的 shutdown 文件,客戶端我寫了幾行代碼,去通過(guò) Requests 庫(kù)每隔30s 發(fā)送 HTTP head 請(qǐng)求去判斷文件是否是404,如果是404 這說(shuō)明文件不存在,調(diào)用系統(tǒng)關(guān)機(jī)操作,執(zhí)行關(guān)機(jī)。

然后 SSH 到樹(shù)莓派去 ping 目標(biāo)主機(jī),如果返回為空,則說(shuō)明關(guān)機(jī)成功,否則關(guān)機(jī)失敗。這只是針對(duì) Windows 的關(guān)機(jī),如果目標(biāo)主機(jī)是 Linux 則簡(jiǎn)單多了:

ifmsg['Text']==u'關(guān)機(jī)':#刪除網(wǎng)站根目錄的shutdown文件rmfile=os.system('rm-rf/www/shutdown')ifrmfile==0:print'執(zhí)行關(guān)機(jī)消息成功'shutdown_time=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime())itchat.send(shutdown_time+u'正在關(guān)機(jī)....',toUserName='filehelper')paramiko.util.log_to_file('ssh_key-login.log')privatekey=os.path.expanduser(key_file)try:key=paramiko.RSAKey.from_private_key_file(privatekey)exceptparamiko.PasswordRequiredException:key=paramiko.RSAKey.from_private_key_file(privatekey,key_file_pwd)ssh=paramiko.SSHClient()ssh.load_system_host_keys(filename=filename)ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect(hostname=hostname,username=username,pkey=key,port=port)itchat.send(shutdown_time+u'正在確認(rèn)設(shè)備是否完成關(guān)機(jī)操作,大約需要等待60s.',toUserName='filehelper')#等等60秒后確認(rèn),因?yàn)殛P(guān)機(jī)需要一段時(shí)間,如果設(shè)置太短,可能網(wǎng)絡(luò)還沒(méi)斷開(kāi)time.sleep(60)stdin,stdout,stderr=ssh.exec_command('ping192.168.1.182-c1|grep64|cut-d""-f1|head-n1')sshConStatus=stdout.read()sshConStatus=sshConStatus.strip(' ')printtype(sshConStatus)printsshConStatus#如果獲取的值為空,則說(shuō)明已經(jīng)關(guān)機(jī),否則關(guān)機(jī)失敗ifsshConStatus!='64':shutdown_success_err_time=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime())itchat.send(shutdown_success_err_time+u'關(guān)機(jī)成功',toUserName='filehelper')else:shutdown_err_time=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime())itchat.send(shutdown_err_time+u'關(guān)機(jī)失敗,請(qǐng)連接桌面檢查客戶端程序是否正常執(zhí)行',toUserName='filehelper')ssh.close()itchat.auto_login(hotReload=True,enableCmdQR=2)itchat.run()

客戶端代碼,寫完扔計(jì)劃任務(wù),開(kāi)機(jī)啟動(dòng):

importrequestsimportosimporttimewhile1:time.sleep(30)r=requests.head("https://awen.me/shutdown")printr.status_codeifr.status_code==404:os.system("shutdown-s-t5")

使用 TeamViewer 連接:

缺點(diǎn)

網(wǎng)頁(yè)端微信必須一直登錄,不方便,這個(gè)就需要微信不能斷網(wǎng)了。

WakeOnLan 是廣播 MAC 地址的,貌似不能返回是否成功沒(méi),所以還是要 ping 主機(jī)看看通不通,判斷下。

需要一個(gè)樹(shù)莓派做跳板機(jī),否則也不能喚醒內(nèi)網(wǎng)設(shè)備。

如果只允許自己控制最好是使用文件助手來(lái)發(fā)送消息,因?yàn)槟J(rèn)情況下,任何人都可以給你發(fā)送指令開(kāi)機(jī)。

Windows需要安裝TeamViewer并且設(shè)置為開(kāi)機(jī)自動(dòng)啟動(dòng)以及綁定賬號(hào)設(shè)置無(wú)人值守模式。這樣方便遠(yuǎn)程,如果是Linux 則不需要開(kāi)啟 ssh 就可以了。

代碼地址:https://github.com/monkey-wenjun/wchatwakeonlan

文章內(nèi)的代碼如果有 Bug,后續(xù)更新都在 GitHub 上,完整代碼請(qǐng)參考 GitHub ,此文章代碼不再更新。

原文:https://awen.me/post/3709919605.html

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • WINDOWS
    +關(guān)注

    關(guān)注

    4

    文章

    3614

    瀏覽量

    91419
  • 路由器
    +關(guān)注

    關(guān)注

    22

    文章

    3839

    瀏覽量

    116742
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86762

原文標(biāo)題:在家想遠(yuǎn)程公司電腦?Python +微信一鍵連接

文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一鍵還原_一鍵還原精靈等系統(tǒng)還原軟件集合

    一鍵還原程序功能:實(shí)現(xiàn)MGhost一鍵還原程序功能:實(shí)現(xiàn)一鍵備份還原系統(tǒng),
    發(fā)表于 03-12 18:20

    遠(yuǎn)程管理系統(tǒng)定制

    遠(yuǎn)程管理系統(tǒng)定制型號(hào):HBTZ------821產(chǎn)品品牌:河北泰澤產(chǎn)品型號(hào):HBTZ-821版本號(hào):8.1 語(yǔ)言版本:中文 支持平臺(tái):windows平臺(tái) 軟件簡(jiǎn)介:遠(yuǎn)程管理
    發(fā)表于 08-17 15:31

    python黑客操作遠(yuǎn)程開(kāi)機(jī)關(guān)機(jī)

    前言用 python 關(guān)機(jī)相信大家肯定聽(tīng)過(guò)或者實(shí)踐過(guò)吧,那么用 Python 開(kāi)機(jī)呢?這是個(gè)神奇的方法,教你如何用
    發(fā)表于 01-19 20:22

    有什么辦法可以實(shí)現(xiàn)電腦一鍵長(zhǎng)按開(kāi)關(guān)機(jī)功能嗎?

    查了下資料,發(fā)現(xiàn)很多實(shí)現(xiàn)一鍵長(zhǎng)按開(kāi)機(jī)或者關(guān)機(jī)電路的實(shí)現(xiàn)都是MOS管開(kāi)關(guān),加上MCU控制的方式,
    發(fā)表于 08-08 01:59

    windows系統(tǒng)是怎樣去設(shè)置定時(shí)開(kāi)關(guān)機(jī)

    windows系統(tǒng)設(shè)置定時(shí)開(kāi)關(guān)機(jī)的方法文章目錄:windows設(shè)置定時(shí)`開(kāi)機(jī)`1、
    發(fā)表于 10-29 06:37

    ROC-RK3328-CC板是怎樣連接Windows遠(yuǎn)程管理可視化桌面的

    ROC-RK3328-CC板是怎樣連接Windows遠(yuǎn)程管理可視化桌面的?有哪些操作流程?
    發(fā)表于 03-09 07:42

    如何遠(yuǎn)程管理windows2003服務(wù)器

    如何遠(yuǎn)程管理windows2003服務(wù)器 我目前遠(yuǎn)程管理著多臺(tái)服務(wù)器,并且經(jīng)常需要遠(yuǎn)程連接到客戶的系統(tǒng)
    發(fā)表于 01-27 13:34 ?1857次閱讀

    微軟Windows10值得升級(jí)嗎?給你八個(gè)升級(jí)Windows10的理由!

    微軟公司于2015年7月29日發(fā)布了全新的Windows10操作系統(tǒng),并宣布開(kāi)展長(zhǎng)達(dá)年的免費(fèi)升級(jí)期,筆者在第時(shí)間就進(jìn)行了升級(jí)?,F(xiàn)在距離Win10
    發(fā)表于 07-14 16:13 ?1105次閱讀

    Linux操作系統(tǒng)實(shí)用教程之如何Linux系統(tǒng)遠(yuǎn)程管理

    本文檔的主要內(nèi)容詳細(xì)介紹的是Linux操作系統(tǒng)實(shí)用教程之如何Linux系統(tǒng)遠(yuǎn)程管理 主要內(nèi)容是:1 遠(yuǎn)程管理簡(jiǎn)介2 終端方式的字符界面遠(yuǎn)程管理
    發(fā)表于 10-31 18:04 ?0次下載

    windows10操作系統(tǒng)安全模式的使用技巧

    談到系統(tǒng)的安全模式大家并不陌生,在安全模式下可以解決相關(guān)的電腦問(wèn)題。windows操作系統(tǒng)的安全模式也是非常實(shí)用的。不管是winxp、win7時(shí)代,還是現(xiàn)在的windows10
    發(fā)表于 06-12 17:25 ?1567次閱讀

    一鍵開(kāi)關(guān)機(jī)電路圖解析

    按鍵電路在我們的電路設(shè)計(jì)中非常常見(jiàn),其中有種比較特殊,就是一鍵開(kāi)關(guān)機(jī)電路,顧名思義,就是只用個(gè)按鍵實(shí)現(xiàn)
    發(fā)表于 05-02 16:08 ?6.7w次閱讀
    <b class='flag-5'>一鍵</b>開(kāi)<b class='flag-5'>關(guān)機(jī)</b>電路圖解析

    微軟表態(tài):Windows10操作系統(tǒng)是“最后代”

    早在2015年Windows 10發(fā)布時(shí),微軟就表態(tài),這是Windows操作系統(tǒng)的“最后代”,即沒(méi)有所謂的
    的頭像 發(fā)表于 11-06 11:10 ?6354次閱讀

    windows系統(tǒng)設(shè)置定時(shí)開(kāi)關(guān)機(jī)的方法

    windows系統(tǒng)設(shè)置定時(shí)開(kāi)關(guān)機(jī)的方法文章目錄:、windows設(shè)置定時(shí)`開(kāi)機(jī)`1、
    發(fā)表于 10-22 13:51 ?5次下載
    <b class='flag-5'>windows</b><b class='flag-5'>系統(tǒng)</b>設(shè)置定時(shí)開(kāi)<b class='flag-5'>關(guān)機(jī)</b>的方法

    軟件配合實(shí)現(xiàn)的“一鍵開(kāi)關(guān)機(jī)電路

    軟件配合實(shí)現(xiàn)的“一鍵開(kāi)關(guān)機(jī)電路”一鍵開(kāi)關(guān)機(jī)電路僅使用個(gè)按鍵,就可以
    發(fā)表于 12-09 10:36 ?31次下載
    軟件配合<b class='flag-5'>實(shí)現(xiàn)</b>的“<b class='flag-5'>一鍵</b>開(kāi)<b class='flag-5'>關(guān)機(jī)</b>電路

    如何使用windows10遠(yuǎn)程連接虛擬機(jī)桌面

    本文介紹了如何使用 windows10 遠(yuǎn)程連接虛擬機(jī)桌面(已使用遠(yuǎn)程連接工具連接了虛擬機(jī),如
    的頭像 發(fā)表于 07-12 11:18 ?3316次閱讀