如何捕获WOL数据包?

如何捕获WOL数据包?

我用了

sudo tcpdump -v -i eth0 ether proto 0x0842 or udp port 9

WakeMeOnLan但唤醒NirSoft计算机时没有看到任何东西。


Wireshark

在此输入图像描述

答案1

使用此命令,您可以减少到只是试图唤醒:

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'

这可以捕捉到唤醒etherwake,以太类型 0x0842(AMD魔包格式), 和wakeonlanUDP:9),但需要接口运行在promiscuous mode

此示例的输出如下:

44:55:33:11:56:66
11:22:33:66:56:af
11:be:33:ef:56:af

要从不同的计算机进行测试,例如:

wakeonlan 12:de:ad:be:ef:56
etherwake -i wlp2s0 -b 31:32:33:34:35:36

要仅捕获通过 UDP 发送的数据(例如wakeonlan命令),您可以使用不需要混杂模式的脚本:

nc -dknl -p 9 -u |
 stdbuf -o0 xxd -c 6 -p |
 stdbuf -o0 uniq |
 stdbuf -o0 grep -v 'ffffffffffff' |
 while read ; do
   echo ${REPLY:0:2}:${REPLY:2:2}:${REPLY:4:2}:${REPLY:6:2}:${REPLY:8:2}:${REPLY:10:2};
 done

您可以启动其他操作来代替while read ... echo blabla

答案2

维基百科关于 LAN 唤醒数据包的结构有这样的说法(强调我的):

魔术数据包是一个广播帧,其有效负载中的任何位置都包含 255 个字节中的 6 个字节(十六进制的 FF FF FF FF FF FF FF),后面跟着 16 个重复的目标计算机的 48 位 MAC 地址,总共 102 个字节。

由于魔术包仅扫描上面的字符串,并且实际上并没有被完整的协议栈解析,它可以作为任何网络层和传输层协议发送,尽管它通常作为 UDP 数据报发送到端口 0、7 或 9,或者直接通过以太网作为 EtherType 0x0842 发送。

因此,您当前的捕获过滤器不能保证捕获所有 WOL 数据包。和根据文档,看来 WakeMeOnLan 应用程序有多种方式来发送 WOL 数据包,因此您可能需要进行一个简短的未过滤测试捕获,以找出应用程序发送的 WOL 数据包类型,然后相应地定制您的过滤器。

相关内容