有可能在bash中实现局域网唤醒魔术包吗?我使用的是旧的,自定义的BusyBox,没有ether-wake
。是否可以用其他一些shell命令来替换它,例如:
wakeonlan 11:22:33:44:55:66
有可能在bash中实现局域网唤醒魔术包吗?我使用的是旧的,自定义的BusyBox,没有ether-wake
。是否可以用其他一些shell命令来替换它,例如:
wakeonlan 11:22:33:44:55:66
Answers:
您需要能够发送以太网数据包的设备,这些数据包将被您要唤醒的设备看到。
ether-wake
BusyBox中的命令正是您所需要的。如果您的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中的字节,例如\x42
(B
),然后通过管道传输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
我有一个在旧的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。