Skip to content
0

WOL

Wol 指的是 Wake On Lan 技术。

安装

在路由器系统的软件包中搜索安装 wakeonlan 即可

使用方式:

$ wakeonlan -i [广播地址] [Mac 地址]

假设我的路由器 IP 地址是 192.168.100.1,那么对应的广播地址就是 192.168.100.255

有趣的唤醒脚本

当回到家,手机连接到路由器 WIFI 后,会通过 WOL 技术,将家中的 windows 开机

确保路由器中安装了 tcpdumpwakeonlan,如果没有,去下载对应的系统软件即可,然后可以执行如下脚本(mac地址和广播地址切换为自己对应的)

phone_mac="8a:4f:5a:b0:68:80"
window_mac="c8:ff:bf:01:14:d1"
broadcast_address="192.168.100.255"

while true; do
    # 监测 phone_mac 设备的连接状态
    tcpdump -l -e -n arp | grep $phone_mac | while read -r line; do
        echo "Device with MAC address $phone_mac is connected. Sending Wake-on-LAN signal to $window_mac..."
        wakeonlan -i $broadcast_address $window_mac
        break  # 一旦检测到设备连接,执行相关操作并停止内部循环
    done
done

使用 procd 后台运行

procd 类似与 systemctl,我们可以直接在路由器上使用它来托管我们的服务:

创建脚本文件,将其放在 /usr/bin 目录下

$ vim /usr/bin/wol_monitor.sh && chmod +x /usr/bin/wol_monitor.sh

将你的脚本内容复制进去,并添加脚本头:

#!/bin/sh

phone_mac="8a:4f:5a:b0:68:80"
window_mac="c8:ff:bf:01:14:d1"
broadcast_address="192.168.100.255"

while true; do
    tcpdump -l -e -n arp | grep $phone_mac | while read -r line; do
        echo "Device with MAC address $phone_mac is connected. Sending Wake-on-LAN signal to $window_mac..."
        wakeonlan -i $broadcast_address $window_mac
        break
    done
done

创建启动服务脚本

$ vim /etc/init.d/wol_monitor && chmod +x /etc/init.d/wol_monitor

写入内容:

#!/bin/sh /etc/rc.common

START=99
USE_PROCD=1

start_service() {
    procd_open_instance
    procd_set_param command /usr/bin/wol_monitor.sh
    procd_set_param respawn
    procd_set_param stdout 1
    procd_set_param stderr 1
    procd_close_instance
}

启用管理服务:

$ /etc/init.d/wol_monitor enable  # 设置开机自启
$ /etc/init.d/wol_monitor start   # 立即启动服务
$ /etc/init.d/wol_monitor stop     # 停止服务
$ /etc/init.d/wol_monitor restart  # 重启服务
$ /etc/init.d/wol_monitor status   # 查看服务状态

Released under the MIT License.