📦 Wake-on-LAN — 网络唤醒

v1.2.0

通过 CLI 或 Python 在 Linux、macOS 和 Android 上发送 Wake-on-LAN 魔术包,以使用已保存的别名或直接通过 MAC/IP 唤醒局域网中的休眠设备。

0· 33·0 当前·0 累计
0

运行时依赖

无特殊依赖

安装命令

点击复制
官方npx clawhub@latest install wake-lan
镜像加速npx clawhub@latest install wake-lan --registry https://cn.longxiaskill.com

技能文档

向本地网络发送魔术包,唤醒睡眠/挂起设备。

前置

bash pip install wakeonlan

快速使用

别名唤醒(需先保存设备)

bash python3 /scripts/wol.py

直接按 MAC 唤醒

bash wakeonlan -i -p # 或 python3 /scripts/wol.py --mac --ip [--port ]

Python 调用

python from wakeonlan import send_magic_packet send_magic_packet("", ip_address="", port=9)

管理已保存设备

脚本将设备别名存于 references/devices.json。无预置设备,请自行添加: bash # 添加 python3 /scripts/wol.py add --mac --ip [--port ] # 示例 python3 /scripts/wol.py add desktop --mac aa:bb:cc:dd:ee:ff --ip 192.168.1.100 # 列出 python3 /scripts/wol.py list # 删除 python3 /scripts/wol.py remove

工作原理

wol.py 通过两种方式发魔术包以提高可靠性:
  • wakeonlan CLI — 标准工具
  • Raw UDP sockets — CLI 失效时备用(如 Termux/Android)
同时向广播 (255.255.255.255) 与指定 IP 的 9、7 端口发包。

故障排查

Termux / Android 已知问题

wakeonlan CLI 可能因 Android Wi-Fi 栈阻断广播 UDP 而失效;wol.py 额外用 raw UDP 向广播及指定 IP 的 9、7 端口发包绕过。

目标 PC 无法唤醒

  • BIOS:开启 "Wake on LAN" / "Power On by PCI-E"
  • Windows:
- powercfg /h off,关闭快速启动 - 管理员 cmd:powercfg -deviceenablewake "Realtek PCIe GbE Family Controller"
  • Linux:sudo ethtool -s eth0 wol g
  • 路由器:给目标设静态 DHCP,防 IP 变动
  • 目标须处于 S3(睡眠)或 S5(关机且启用 WOL),且未断电
  • 无线 WOL:多数无线网卡不支持,请用有线

手动验证 WOL

python python3 -c " import socket, time mac = bytes.fromhex('AABBCCDDEEFF') packet = b'\xff' 6 + mac 16 for target in ['255.255.255.255', 'YOUR_DEVICE_IP']: for port in [9, 7]: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) sock.sendto(packet, (target, port)) sock.close() time.sleep(0.2) print('Magic packets sent!') "

数据来源ClawHub ↗ · 中文优化:龙虾技能库