【发布时间】:2018-11-08 16:10:22
【问题描述】:
是否可以伪造 wake on LAN 魔术包 并仅通过 单行 bash 命令发送它?
当然,我知道有专门的工具可以一次性解决问题,但了解 WOL 锻造的最低要求可能会很有用。这就是:如何处理 LAN 唤醒无需特定工具。
【问题讨论】:
标签: bash wake-on-lan
是否可以伪造 wake on LAN 魔术包 并仅通过 单行 bash 命令发送它?
当然,我知道有专门的工具可以一次性解决问题,但了解 WOL 锻造的最低要求可能会很有用。这就是:如何处理 LAN 唤醒无需特定工具。
【问题讨论】:
标签: bash wake-on-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 十六进制说明符(以便 @987654333在将字符串发送到网络堆栈之前,@ 变为 \x11、22 变为 \x22 ... 等等。在 Ubuntu、Kali 甚至 CygWin(Windows 7 SP 1 64 位)上测试工作。
考虑:
-b 参数。-b) 上有一个错误,因此您必须将其替换为 NetCat 传统版本(netcat-traditional package on apt-get 安装程序)。$Broadcast 地址替换为目标公共 IP,并在目标上打开/转发指定的 $PortNumber (UDP)。echo -e 可以替换为 printf。上例的 WOL 魔术包字符串:
FFFFFFFFFFFF112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566
(1) 确实,sed 不是明确要求的。此处用于删除 ':' 并将\x 添加到魔术包的伪造字符串中的每对字符。我知道有一些方法可以通过一些 shell 扩展来替换 sed。
【讨论】:
bash的/dev/udp代替netcat吗?
\x0a 充当网络包的某种datagram break 标志,因此您不能为0a:11:22:33:44:55 等MAC 发送(或者我不知道如何)WOL。
netcat-traditional 包(Unix)来运行此命令,而不是 ǹetcat-openbsd 包,后者有不同的方式来传递参数。如果您的系统使用 openbsd 风格(如在 Ubuntu 16.04 上),请将其卸载,然后安装传统风格。要检查您的口味,请运行man nc。如果最上面一行是“BSD 通用命令手册”,那就是 BSD 风格。
nc (ubuntu 14.04) 上遇到了与-b 相同的问题,但将nc 调用替换为socat 调用:socat - UDP-DATAGRAM:${Broadcast}:${PortNumber},broadcast
唤醒传输的默认端口是 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
【讨论】: