[英]Bash one-line command to send wake on LAN magic packet without specific tool
是否有可能伪造一个唤醒局域网魔术数据包并只用一行bash命令发送它?
当然,我知道有一些特定的工具可以在一行中解决问题,但了解WOL锻造的最低要求可能很有用。 这是:如何在没有特定工具的情况下处理局域网唤醒。
我能想到的最低要求 :
假设:
命令行将是:
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。 或者,这次是双线:-)命令:
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
进制specificator(使得11
变为\\x11
, 22
变得\\x22
...等等)之前发送所述字符串到网络以堆。 测试在Ubuntu,卡利甚至CygWin的(视窗7 SP 1 64位) 的工作 。
考虑到:
-b
参数。 -b
)的今天(Juy 2015)的错误 ,所以你必须用NetCat Traditional版本(apt-get安装程序上的netcat-traditional软件包)替换它。 $Broadcast
地址,并在目标上打开/转发指定的$PortNumber
(UDP)。 echo -e
可以替换为printf
。 以上示例的WOL魔术包字符串:
FFFFFFFFFFFF112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566
(1)确实,没有明确要求sed
。 它用于删除':'并将\\x
添加到魔术包的伪造字符串中的每对字符。 我知道有一些方法可以通过一些shell扩展来替换sed
。
唤醒传输的默认端口是UDP端口9。
UDP是推荐用于WOL的协议,因为它可以在没有带有安全限制的原始套接字的情况下生成,建议使用端口9,因为它映射到旧的众所周知的丢弃协议。 有时您会看到端口7被使用,但这会映射到echo协议。
这意味着如果您的网络上有主机支持这种旧的简单标准服务,则在使用端口7时将获得不必要的反向散射流量,但在使用端口9时则没有。由于LAN唤醒通常是广播的,因此您可以从后面进行反向散射很多主人。
此外,如果您使用Wireshark等网络嗅探器对WoL进行故障排除,只有在端口9上为UDP数据包时才会正确解码WoL数据包。
来源: https : //superuser.com/questions/295325/does-it-matter-what-udp-port-a-wol-signal-is-sent-to
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.