是否可以伪造一个局域网唤醒魔术包并仅通过单行bash命令发送它?
当然,我知道有特定的工具可以做到这一点,可以一次性解决问题,但了解 WOL 锻造的最低要求可能会很有用。这就是:如何处理局域网唤醒无需特定工具。
我能想到的最低要求:
命令行将是:
echo -e $(echo $(printf 'f%.0s' {1..12}; printf "$(echo $MAC | sed 's/://g')%.0s" {1..16}) | sed -e 's/../\\x&/g') | nc -w1 -u -b 255.255.255.255 4000
将
$MAC
替换为目标 MAC。或者,这次是两行 :-) 命令:
MAC=11:22:33:44:55:66
echo -e $(echo $(printf 'f%.0s' {1..12}; printf "$(echo $MAC | sed 's/://g')%.0s" {1..16}) | sed -e 's/../\\x&/g') | nc -w1 -u -b 255.255.255.255 4000
因此,用更通用的表示法:
MAC=11:22:33:44:55:66
Broadcast=255.255.255.255
PortNumber=4000
echo -e $(echo $(printf 'f%.0s' {1..12}; printf "$(echo $MAC | sed 's/://g')%.0s" {1..16}) | sed -e 's/../\\x&/g') | nc -w1 -u -b $Broadcast $PortNumber
说明:
ffffffffffff
(12 倍 f
)组成,后跟 16 倍不带冒号的目标 MAC(
:
)。
sed
命令从 MAC 中删除冒号 (
:
) 并添加
\x
十六进制说明符(以便
11
变为
\x11
,
22
变为
\x22
) ...等等)在将字符串发送到网络堆栈之前。
工作。
考虑:
-b
参数。
-b
) 方面存在 bug,因此您必须将其替换为 NetCat 传统版本(apt-get 安装程序上的 netcat-traditional 软件包)。
$Broadcast
地址替换为目标公共 IP,并在目标上打开/转发指定的 $PortNumber
(UDP)。echo -e
printf
。
FFFFFFFFFFFF112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566
(1) 嗯,确实,
sed
并不是明确要求的。此处用于删除 ':' 并为魔术包伪造字符串中的每对字符添加
\x
。我知道有一些方法可以通过一些 shell 扩展等来替换 sed
。UDP 是建议用于 WOL 的协议,因为它可以在没有带有安全限制的原始套接字的情况下生成,并且建议使用端口 9,因为它映射到旧的众所周知的丢弃协议。有时您会看到端口 7 被使用,但这映射到 echo 协议。
这意味着,如果您的网络上有支持这种旧的简单标准服务的主机,您在使用端口 7 时将获得不必要的反向散射流量,但在使用端口 9 时则不会获得反向散射流量。并且由于 LAN 唤醒通常是广播的,因此您可能会获得反向散射流量来自许多主机。
此外,如果您使用 Wireshark 等网络嗅探器对 WoL 进行故障排除,只有当 WoL 数据包是端口 9 上的 UDP 数据包时,它才会正确解码它们。
来源:
https://superuser.com/questions/295325/does-it-matter-what-udp-port-a-wol-signal-is-sent-to