是否可以伪造唤醒局域网魔术数据包并仅使用单行bash 命令发送它?
当然,我知道有一些特定的工具可以在一行中解决问题,但了解WOL锻造的最低要求可能很有用。这是:如何处理局域网唤醒没有特定工具。
答案 0 :(得分:24)
最低要求我可以想一想:
假设:
命令行将是:
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
),然后是目标MAC的16倍,没有冒号(:
)。sed
命令从MAC中删除删除冒号(:
)并添加\x
十六进制指定程序(以便在将字符串发送到网络堆栈之前,11
变为\x11
,22
变为\x22
......等等)。在Ubuntu,Kali甚至CygWin(Windows 7 SP 1 64位)上测试过工作。
考虑到:
-b
参数。-b
)的错误,因此您必须将其替换为NetCat传统版本(apt-get安装程序上的netcat-traditional包)。$Broadcast
地址替换为目标公共IP,并在目标上打开/转发指定的$PortNumber
(UDP)。echo -e
可以替换为printf
。以上示例的WOL魔术包字符串:
FFFFFFFFFFFF112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566
(1)确实,sed
没有明确要求。它用于删除':'并将\x
添加到魔术包的伪造字符串中的每对字符。我知道有一些方法可以通过某种shell扩展来替换sed
。
答案 1 :(得分:0)
用于唤醒传输的默认端口是UDP端口9。
推荐使用UDP,因为它可以在没有安全限制的原始套接字的情况下生成,并且建议使用端口9,因为它映射到旧的众所周知的丢弃协议。有时您会看到正在使用端口7,但这映射到了echo协议。
这意味着,如果网络中有主机支持此旧的简单标准服务,则在使用端口7时将获得不必要的反向散射流量,而在使用端口9时将不会获得不必要的反向散射流量。由于通常会广播局域网唤醒,因此您可以得到许多主机的反向散射。
此外,如果要使用网络嗅探器(例如Wireshark)对WoL进行故障排除,则仅当它们是端口9上的UDP数据包时,它才能正确解码WoL数据包。
来源:https://superuser.com/questions/295325/does-it-matter-what-udp-port-a-wol-signal-is-sent-to