目 录CONTENT

文章目录

通过iphone的siri远程打开家里的电脑

成培培
2024-11-06 / 0 评论 / 0 点赞 / 92 阅读 / 0 字

需求来源

买了个30块钱破小机箱装配上了i3-12100F+二手1650s很般配,用了一段时间发现开机键偶尔开不了机,新主板不太可能会坏啊,拆出来用短接法果然秒开,排查结果就是破机箱电源开关坏了,网上一搜各种花里胡哨的开机键卖,虽然换上不难,但是不太优雅了,心想干脆用手机打开吧,使用板载网卡网络唤醒不就行了

实现方式

  1. 第一步当然是开启主板的网络唤醒功能,一般进入主板BIOS都有地方设置,不同品牌主板设置地方不太一样,需要自己百度搜搜。

  2. 第二步电脑关机尝试唤醒,这里你可以微信小程序搜索一下“网络唤醒”小程序,有些小程序可以输入电脑MAC地址在局域网内唤醒指定电脑,但是我没用过,因为打开微信找到小程序再去唤醒还是不够优雅

  3. 如果测试通过可以唤醒的话,就可以尝试其他唤醒方式,比如:如果你的路由器支持安装插件,或者本身有唤醒功能,那么可以直接用,但是我没用过,因为依旧不够优雅。。。

  4. 这里我我在网上搜索了一下网络唤醒的原理,其实就是给局域网广播一个数据包,具体可以自己搜索一下,于是写了以下Python脚本:

 #!/usr/bin/python3
# -*- coding=utf8 -*-

import socket
import struct
import sys

def WOL(mac_address):
    if len(mac_address) == 12:
        pass
    elif len(mac_address) == 12 + 5:
        sep = mac_address[2]
        mac_address = mac_address.replace(sep, '')
    else:
        raise ValueError('Incorrect MAC address format')
    data = ''.join(['FFFFFFFFFFFF', mac_address * 16])
    send_data = b''
    for i in range(0, len(data), 2):
        byte_dat = struct.pack('B', int(data[i: i + 2], 16))
        send_data = send_data + byte_dat
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    sock.sendto(send_data, ('192.168.5.255', 9))
    sock.close()

'''
    网络唤醒
'''
if name == '__main__':
    mac = None
    if len(sys.argv) < 2:
        mac = 'D8:43:AE:76:0B:4C'
    else:
        mac = sys.argv[1]
    if mac is None:
        print("请传入MAC地址")
        exit()
    WOL(mac)

其中WOL函数是核心的唤醒代码,传局域网内mac地址,即可唤醒指定电脑,里面有个地址192.168.5.255,是我家的路由器的广播地址,如果你的路由器地址是192.168.1.1,那么广播地址应该是192.168.1.255,根据实际情况进行修改。入口函数支持传一个参数mac地址,当然也可以不传,我这里不传就用“D8:43:AE:76:0B:4C”,这是我家电脑的mac地址

好了,现在把这个脚本丢到路由器里直接执行就能唤醒电脑了,前提是路由器支持Python,但是这样做有什么好处呢,还不是通过路由器唤醒,这时就不得不提iphone上的一款神器:快捷指令,配置快捷指令如下:

选择了脚本-通过SSH运行脚本,填写了你路由器的ssh连接方式,我这里把路由器的ssh端口映射到了外网,并且做了DDNS绑定了域名,这样我就可以在外网随时打开家里电脑了,一般不太推荐这么搞,容易被攻击,我比较勇无所畏惧-_-

好了,现在可以用手机的快捷指令功能打开电脑了,快捷指令最大的好处是可以使用siri启动,现在我在任何地方都可以对手机说:hi siri 电脑开机,然后我的电脑就开机了,总算够优雅了。。。

0

评论区