Bash 无需特定工具即可在 LAN 魔术数据包上发送唤醒的单行命令
Bash one-line command to send wake on LAN magic packet without specific tool
是否可以伪造一个 LAN 唤醒魔术包 并在 一行中发送它 bash命令?
当然,我知道有专门的工具可以一次性解决问题,但了解 WOL 锻造的最低要求可能会很有用。这是:如何在没有特定工具的情况下处理局域网唤醒。
最低要求我可以考虑:
- Bash支持大括号扩展(我认为是v3.5.1及以上)
- sed命令(1).
- 网猫.
假设:
- LAN 的 WOL 包,广播到 255.255.255.255。
命令行将是:
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
解释:
- WOL 魔包由
ffffffffffff
组成(12次f
)后跟16次目的地MAC没有冒号( :
).
- 此处使用
sed
命令从 MAC 中 删除冒号 (:
) 并添加 \x
hex specificator(因此 11
变为 \x11
,22
变为 \x22
... 等等)字符串到网络堆栈。
- 伪造的 LAN 唤醒包被发送到网络堆栈通过管道传输到 NetCat。 SoCat 可以改用(当然,语法会有所不同)。
在 Ubuntu、Kali 甚至 CygWin(Windows 7 SP 1 64 位)上测试工作。
要考虑:
- CygWin 的 NetCat 版本不需要
-b
参数。
- NetCat 的 OpenBSD 版本在今天(2015 年 7 月)广播数据发送(
-b
)有一个 bug,因此您必须将其替换为 NetCat Traditional版本(apt-get 安装程序上的 netcat 传统包)。
- 此示例使用 UDP 端口 4.000。 特定端口号在WOL上似乎不重要。
- 上面的一行 bash 命令应该也适用于通过互联网 通过互联网唤醒 。在这种情况下,将
$Broadcast
地址替换为目标 public IP,并 open/forward 目标上指定的 $PortNumber
(UDP)。
echo -e
可以换成printf
.
上例的 WOL 魔法数据包字符串:
FFFFFFFFFFFF112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566
(1) 事实上,sed
并不是明确要求的。它在这里用于删除':'并向魔术包伪造字符串中的每对字符添加\x
。我知道有一些方法可以用 shell 左右的扩展替换 sed
。
唤醒传输的默认端口是 UDP 端口 9。
UDP 是用于 WOL 的推荐协议,因为它可以在没有带有安全限制的原始套接字的情况下生成,并且建议使用端口 9,因为它映射到旧的众所周知的丢弃协议。有时您会看到正在使用端口 7,但这映射到 echo 协议。
这意味着如果您的网络上有支持这种旧的简单标准服务的主机,您在使用端口 7 时将获得不必要的反向散射流量,但在使用端口 9 时 none。并且由于局域网唤醒正常广播,你可能会从许多主机那里得到反向散射。
此外,如果您使用 Wireshark 等网络嗅探器对 WoL 进行故障排除,只有当它们是端口 9 上的 UDP 数据包时,它才会正确解码 WoL 数据包。
来源:https://superuser.com/questions/295325/does-it-matter-what-udp-port-a-wol-signal-is-sent-to
是否可以伪造一个 LAN 唤醒魔术包 并在 一行中发送它 bash命令?
当然,我知道有专门的工具可以一次性解决问题,但了解 WOL 锻造的最低要求可能会很有用。这是:如何在没有特定工具的情况下处理局域网唤醒。
最低要求我可以考虑:
- Bash支持大括号扩展(我认为是v3.5.1及以上)
- sed命令(1).
- 网猫.
假设:
- LAN 的 WOL 包,广播到 255.255.255.255。
命令行将是:
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
解释:
- WOL 魔包由
ffffffffffff
组成(12次f
)后跟16次目的地MAC没有冒号(:
). - 此处使用
sed
命令从 MAC 中 删除冒号 (:
) 并添加\x
hex specificator(因此11
变为\x11
,22
变为\x22
... 等等)字符串到网络堆栈。 - 伪造的 LAN 唤醒包被发送到网络堆栈通过管道传输到 NetCat。 SoCat 可以改用(当然,语法会有所不同)。
在 Ubuntu、Kali 甚至 CygWin(Windows 7 SP 1 64 位)上测试工作。
要考虑:
- CygWin 的 NetCat 版本不需要
-b
参数。 - NetCat 的 OpenBSD 版本在今天(2015 年 7 月)广播数据发送(
-b
)有一个 bug,因此您必须将其替换为 NetCat Traditional版本(apt-get 安装程序上的 netcat 传统包)。 - 此示例使用 UDP 端口 4.000。 特定端口号在WOL上似乎不重要。
- 上面的一行 bash 命令应该也适用于通过互联网 通过互联网唤醒 。在这种情况下,将
$Broadcast
地址替换为目标 public IP,并 open/forward 目标上指定的$PortNumber
(UDP)。 echo -e
可以换成printf
.
上例的 WOL 魔法数据包字符串:
FFFFFFFFFFFF112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566
(1) 事实上,sed
并不是明确要求的。它在这里用于删除':'并向魔术包伪造字符串中的每对字符添加\x
。我知道有一些方法可以用 shell 左右的扩展替换 sed
。
唤醒传输的默认端口是 UDP 端口 9。
UDP 是用于 WOL 的推荐协议,因为它可以在没有带有安全限制的原始套接字的情况下生成,并且建议使用端口 9,因为它映射到旧的众所周知的丢弃协议。有时您会看到正在使用端口 7,但这映射到 echo 协议。
这意味着如果您的网络上有支持这种旧的简单标准服务的主机,您在使用端口 7 时将获得不必要的反向散射流量,但在使用端口 9 时 none。并且由于局域网唤醒正常广播,你可能会从许多主机那里得到反向散射。
此外,如果您使用 Wireshark 等网络嗅探器对 WoL 进行故障排除,只有当它们是端口 9 上的 UDP 数据包时,它才会正确解码 WoL 数据包。
来源:https://superuser.com/questions/295325/does-it-matter-what-udp-port-a-wol-signal-is-sent-to