Você precisa de algo capaz de enviar um pacote Ethernet que será visto pelo dispositivo que você deseja ativar.
O ether-wake
comando no BusyBox é exatamente o que você procura. Se o seu BusyBox não o possuir, considere recompilar o BusyBox para incluí-lo.
Se você tiver um netcat suficientemente “inchado” (o BusyBox pode ter uma das duas nc
implementações, uma das quais lida apenas com TCP), você pode enviar um pacote UDP criado manualmente para o endereço de broadcast do segmento de rede ao qual o dispositivo está conectado.
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
Outro utilitário BusyBox que você pode abusar ao enviar esse pacote é syslogd
.
syslogd -n -O /dev/null -l 0 -R 192.0.2.255/7 &
syslogd_pid=$!
logger "$wol_packet"
kill $!
Se o MAC contiver um byte nulo, você não poderá criar o pacote tão facilmente. Escolha um byte que não esteja \xff
e que não esteja no MAC, digamos \x42
( B
), e passe através dele tr
.
echo "$wol_packet" | tr B '\000' | nc -u 7 192.0.2.255
Se você realmente possui o bash (o que é extremamente incomum em dispositivos com o BusyBox - você tem certeza de que realmente possui o bash, e não outro shell fornecido pelo BusyBox?), Ele pode enviar pacotes UDP redirecionando para /dev/udp/$hostname/$port
.
echo "$wol_packet" >/dev/udp/192.0.2.255/7