通过BusyBox唤醒局域网?


8

有可能在bash中实现局域网唤醒魔术包吗?我使用的是旧的,自定义的BusyBox,没有ether-wake。是否可以用其他一些shell命令来替换它,例如:

wakeonlan 11:22:33:44:55:66

wakeonlan,尽管它似乎需要perl,但可能不在您的busybox中。
jw013

如果您能够使用,python请参见code.activestate.com/recipes/358449-wake-on-lan并将其放入alias您的.bashrc
harish.venkat 2012年

由于BusyBox具有许多配置选项,因此您应该告诉我们您所拥有的。另外,您确定自己有重击吗?Bash和BusyBox是一个非常不寻常的组合。
吉尔斯(Gilles)'所以

GNU bash,版本2.05a.0(1)-发行版(arm-unknown-linux-gnu)
michelemarcon 2012年

Answers:


7

您需要能够发送以太网数据包的设备,这些数据包将被您要唤醒的设备看到。

ether-wakeBusyBox中的命令正是您所需要的。如果您的BusyBox没有它,请考虑重新编译BusyBox以包括它。

如果您拥有足够“膨胀”的netcat(BusyBox可以具有两种nc实现之一,其中一种仅处理TCP),则可以将手工制作的UDP数据包发送到设备所连接的网段的广播地址。

mac=$(printf '\xed\xcb\xa9\x87\x65\x43') # MAC = ed:cb:a9:87:65:43
wol_packet=$(printf "\xff\xff\xff\xff\xff\xff$mac$mac$mac$mac$mac$mac$mac$mac$mac$mac$mac$mac$mac$mac$mac$mac")
echo "$wol_packet" | nc -u 7 192.0.2.255

您可能会滥用发送该数据包的另一个BusyBox实用程序是syslogd

syslogd -n -O /dev/null -l 0 -R 192.0.2.255/7 &
syslogd_pid=$!
logger "$wol_packet"
kill $!

如果MAC包含一个空字节,您将无法如此轻松地制作数据包。选择一个\xff不在MAC中且不在MAC中的字节,例如\x42B),然后通过管道传输tr

echo "$wol_packet" | tr B '\000' | nc -u 7 192.0.2.255

如果您确实有bash(这在使用BusyBox的设备上是非常不寻常的-确定您确实有bash,而不是由BusyBox提供的另一个shell?),它可以通过重定向到发送UDP数据包/dev/udp/$hostname/$port

echo "$wol_packet" >/dev/udp/192.0.2.255/7

我的nc不支持-u; syslogd不支持-l;最终我没有/ dev / udp设备。:(
michelemarcon

是的,我有重击,请检查上面的评论。
michelemarcon '02

@michelemarcon您奇怪的设备似乎缺少我能想到的每种方法的基本组成部分。我建议编译并上传二进制文件(例如,更完整的BusyBox)。
吉尔斯(Gilles)'所以别再邪恶了'

1

/dev/udp 被bash识别并且在文件系统中并不真正存在,因此请尝试一下。

我认为只要有支持就可以使用syslogd而无需-l切换-R

我有syslogdwithount的busybox -R,不,nc也不bash,我仍然被卡住。


0

我有一个在旧的HTC dream上运行的ssh服务器。我的busybox版本也不包含以太唤醒功能,而且我不够熟练,无法编译自己的busybox。幸运的是,我设法使用以下方法唤醒了PC:

bash
cat mac2.txt | tr B '\000' >/dev/udp/192.0.1.255/7

请注意,广播IP在我的网络中是不同的。

我在PC上制作了包含魔术包的文件(mac2.txt),并将其通过SFTP推送到服务器。因为我的mac有空字节,所以我必须使用tr来将所有x42字节替换为00。


为什么对猫无用
rahmu 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.