Вам нужно что-то, что способно отправить пакет Ethernet, который будет виден на устройстве, которое вы хотите активировать.
Команда 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, скажем \x42
( B
), и передайте по каналу tr
.
echo "$wol_packet" | tr B '\000' | nc -u 7 192.0.2.255
Если у вас действительно есть bash (что крайне необычно для устройств с BusyBox - вы уверены, что у вас действительно есть bash, а не другая оболочка, предоставленная BusyBox?), Он может отправлять UDP-пакеты путем перенаправления на /dev/udp/$hostname/$port
.
echo "$wol_packet" >/dev/udp/192.0.2.255/7