监听唤醒局域网请求

监听唤醒局域网请求

我想知道如何在正在运行的系统上监听 wakeonlan paquets。

我知道我的问题可能看起来有点没用,因为如果系统正在运行,就没有必要唤醒它!

答案1

nc可以使用 UDP 端口进行监听。魔法包通常通过广播发送到端口 9。因此,命令将是:

nc -ul 9

根据 nc 的实现,您可能还需要提供标志-p

nc -ul -p 9

要测试它,请使用wakeonlan命令...

wakeonlan <your-mac>

...并在 nc 终端中查看输出。

答案2

另一个答案仅适用于通过 UDP:9 传入的“唤醒!”数据包(例如来自wakeonlan,而不是专用的数据包以太类型 0x0842(AMD 魔术包格式)(例如etherwake)。

要获取这两种唤醒方法的有效载荷的相关部分:

tcpdump -UlnXi eth0 ether proto 0x0842 or udp port 9 2>/dev/null |
sed -nE 's/^.*20:  (ffff|.... ....) (..)(..) (..)(..) (..)(..).*$/\2:\3:\4:\5:\6:\7/p'

输出是一每行,行缓冲。

答案3

我知道我的问题可能看起来有点没用,因为如果系统正在运行,就没有必要唤醒它!

完全不是。在配置或故障排除时,您可能需要查看数据包是否确实到达。

使用此命令

$ sudo tcpdump -i eth0 -n -v -s0 udp port 9

您可以看到 eth0 接口上端口 9 的每个 UDP 数据包。输出将随着每个满足条件的数据包而更新(不同于nc在第一个数据包后停止)。

你可以改变eth0wlan0或任何您需要的东西(是的,您也可以使用无线接口唤醒设备)。

一个例子:

$ sudo tcpdump -i eth0 -n -v -s0 udp port 9
tcpdump: listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes

22:09:33.209538 IP (tos 0x0, ttl 64, id 52416, offset 0, flags [DF], proto UDP (17), length 130)
    192.168.1.110.39220 > 192.168.1.18.9: UDP, length 102

22:09:36.893741 IP (tos 0x0, ttl 64, id 22576, offset 0, flags [DF], proto UDP (17), length 130)
    192.168.1.110.41489 > 192.168.1.255.9: UDP, length 102

22:09:38.227547 IP (tos 0x0, ttl 63, id 5077, offset 0, flags [DF], proto UDP (17), length 130)
    public_IP.3796 > 192.168.1.18.9: UDP, length 102

根据我的实验,您可以将数据包发送至:

  • Case0:广播地址(局域网内部,例如192.168.1.255)
  • 情况 1:设备的 IP(在 LAN 内,例如 192.168.1.18)。为此,您的 Hub/路由器可能需要 ARP 表)
  • 案例 2:路由器的 Public_IP(为此您需要配置 NAT 和可能的 ARP 表*)将转发到设备的 IP(案例 1)

*需要 ARP 表是因为在设备断开连接约 15 分钟后,集线器/路由器将不会记住 IP 的 MAC 地址,因此它将拒绝发送数据包,因为它不知道将其发送给哪里/发送给谁。

如果我说错了什么,请评论(以更新)。

相关内容