Necesita algo que sea capaz de enviar un paquete Ethernet que será visto por el dispositivo que desea activar.
El ether-wake
comando en BusyBox es exactamente lo que buscas. Si su BusyBox no lo tiene, considere volver a compilar BusyBox para incluirlo.
Si tiene un netcat suficientemente "hinchado" (BusyBox puede tener una de dos nc
implementaciones, una de las cuales maneja solo TCP), puede enviar un paquete UDP diseñado manualmente a la dirección de transmisión del segmento de red al que está conectado el dispositivo.
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
Otra utilidad de BusyBox que podría abusar para enviar ese paquete es syslogd
.
syslogd -n -O /dev/null -l 0 -R 192.0.2.255/7 &
syslogd_pid=$!
logger "$wol_packet"
kill $!
Si el MAC contiene un byte nulo, no podrá crear el paquete tan fácilmente. Elija un byte que no esté \xff
y que no esté en el MAC, digamos \x42
( B
), y canalice tr
.
echo "$wol_packet" | tr B '\000' | nc -u 7 192.0.2.255
Si realmente tiene bash (lo cual es extremadamente inusual en dispositivos con BusyBox, ¿está seguro de que realmente tiene bash y no otro shell proporcionado por BusyBox?), Puede enviar paquetes UDP al redirigirlos /dev/udp/$hostname/$port
.
echo "$wol_packet" >/dev/udp/192.0.2.255/7