Vous avez besoin de quelque chose capable d'envoyer un paquet Ethernet qui sera vu par l'appareil que vous souhaitez réveiller.
La ether-wake
commande dans BusyBox est exactement ce que vous recherchez. Si votre BusyBox ne l'a pas, pensez à recompiler BusyBox pour l'inclure.
Si vous avez un netcat suffisamment «gonflé» (BusyBox peut avoir l'une des deux nc
implémentations, dont une gère uniquement TCP), vous pouvez envoyer un paquet UDP conçu manuellement à l'adresse de diffusion du segment de réseau auquel l'appareil est connecté.
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
Un autre utilitaire BusyBox que vous pourriez abuser en envoyant ce paquet est syslogd
.
syslogd -n -O /dev/null -l 0 -R 192.0.2.255/7 &
syslogd_pid=$!
logger "$wol_packet"
kill $!
Si le MAC contient un octet nul, vous ne pourrez pas créer le paquet si facilement. Choisissez un octet qui n'est pas \xff
et qui n'est pas dans le MAC, disons \x42
( B
), et dirigez-le tr
.
echo "$wol_packet" | tr B '\000' | nc -u 7 192.0.2.255
Si vous avez vraiment bash (ce qui est extrêmement inhabituel sur les appareils avec BusyBox - êtes-vous sûr que vous avez vraiment bash, et pas un autre shell fourni par BusyBox?), Il peut envoyer des paquets UDP en redirigeant vers /dev/udp/$hostname/$port
.
echo "$wol_packet" >/dev/udp/192.0.2.255/7