我希望能够对已启动的计算机发送的局域网唤醒数据包做出反应。我能够使用 WOL 打开我的计算机,因此整个系统似乎可以正常工作。我现在的问题是:
- 当 Linux 已经启动时,有没有办法接收那些 WOL 事件?
- BIOS/UEFI/网卡是否会向已启动的操作系统(Debian)发送任何 WOL 事件?
我知道我可以监听 WOL UDP 数据包,但想知道是否有更简单的解决方案。
答案1
您需要监听端口。这里有一个有用的工具 数控。
帖子 通过网络唤醒来使用 kvm 和 libvirt 触发虚拟机 包括这个有用的 bash 代码片段 Gotschi 的回答:
#!/bin/bash
nc -dknl -p 9 -u | # listen to udp port 9 for packets, check if it is a magic packet
stdbuf -o0 xxd -c 6 -p |
stdbuf -o0 uniq |
stdbuf -o0 grep -v 'ffffffffffff' |
while read ; do
mac="${REPLY:0:2}:${REPLY:2:2}:${REPLY:4:2}:${REPLY:6:2}:${REPLY:8:2}:${REPLY:10:2}"
# do something with the sender's mac found in the magic packet
...
done
关于拦截 WOL 请求的问题,已在帖子中讨论 如何在 PC 运行时识别 WOL(局域网唤醒)请求。
用户 Duston 的评论说:
LAN 唤醒实际上是 MAC 级别的技术(尽管有些实现使用 UDP),因此您确实必须在原始数据包到达时对其进行监听……假设 NIC 将该数据包传递给 NIC 驱动程序。当收到数据包时,并不是软件启动了计算机,而是 NIC 向主板发出信号。简而言之,我认为您不会找到简单的答案。
这在已接受的 OldFrank 的回答:
我同意 Duston 的观点,认为 WOL 是第 2 层与硬件相结合的东西。在正常工作的 PC 上,NIC 硬件将其传递给驱动程序的可能性很小,因为该硬件的任务就是仅在真正需要时才干扰您的 CPU。在正常工作的 PC 上看到魔术包的最佳机会是:安装并运行嗅探器(数据包分析器)软件。这将强制支持 NIC 进入特殊模式,将每个数据包传输到 CPU。如果您现在可以在输出中看到魔术包,下一步将是配置嗅探器,以便在看到魔术包时提醒您。完成。所有这些都将非常耗费 CPU。您可以编写执行所有这些操作的软件,但这实际上是用固定查询而不是可配置查询重写整个嗅探器。