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 变为 \x1122 变为 \x22 ... 等等)字符串到网络堆栈。
  • 伪造的 LAN 唤醒包被发送到网络堆栈通过管道传输到 NetCatSoCat 可以改用(当然,语法会有所不同)。

在 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