是否可以伪造LAN 唤醒魔术包并仅通过一行 bash命令发送它?
当然,我知道有一些特定的工具可以一次性解决这个问题,但了解 WOL 锻造的最低要求可能会很有用。这就是:如何在没有特定工具的情况下处理 LAN 唤醒。
是否可以伪造LAN 唤醒魔术包并仅通过一行 bash命令发送它?
当然,我知道有一些特定的工具可以一次性解决这个问题,但了解 WOL 锻造的最低要求可能会很有用。这就是:如何在没有特定工具的情况下处理 LAN 唤醒。
我能想到的最低要求:
假设:
命令行将是:
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
在Ubuntu、Kali 甚至 CygWin(Windows 7 SP 1 64 位)上进行了测试。
考虑:
-b
参数。-b
($Broadcast
地址,并在目标上打开/转发指定的$PortNumber
(UDP)。echo -e
可以替换为printf
。上述示例的 WOL 魔术包字符串:
FFFFFFFFFFFF112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566
(1) 嗯,确实,sed
没有明确要求。它在这里用于删除“:”并添加\x
到魔术包的伪造字符串中的每对字符。我知道有一些方法可以用sed
一些 shell 扩展来代替。
唤醒传输的默认端口是 UDP 端口 9。
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