Sie benötigen etwas, das ein Ethernet-Paket senden kann, das von dem Gerät gesehen wird, das Sie aktivieren möchten.
Der ether-wake
Befehl in BusyBox ist genau das, wonach Sie suchen. Wenn Ihre BusyBox nicht über diese verfügt, sollten Sie BusyBox neu kompilieren, um sie einzuschließen.
Wenn Sie über einen ausreichend "aufgeblähten" Netcat verfügen (BusyBox kann eine von zwei nc
Implementierungen haben, von denen eine nur TCP verarbeitet), können Sie ein manuell erstelltes UDP-Paket an die Broadcast-Adresse des Netzwerksegments senden, mit dem das Gerät verbunden ist.
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
Ein weiteres BusyBox-Dienstprogramm, das Sie beim Senden dieses Pakets missbrauchen könnten, ist syslogd
.
syslogd -n -O /dev/null -l 0 -R 192.0.2.255/7 &
syslogd_pid=$!
logger "$wol_packet"
kill $!
Wenn der MAC ein Null-Byte enthält, können Sie das Paket nicht so einfach erstellen. Wählen Sie ein Byte aus, das nicht \xff
im MAC enthalten ist, z. B. \x42
( B
), und leiten Sie es durch tr
.
echo "$wol_packet" | tr B '\000' | nc -u 7 192.0.2.255
Wenn Sie wirklich Bash haben (was auf Geräten mit BusyBox äußerst ungewöhnlich ist - sind Sie sicher, dass Sie wirklich Bash haben und keine andere von BusyBox bereitgestellte Shell?), Kann es UDP-Pakete durch Umleiten an senden /dev/udp/$hostname/$port
.
echo "$wol_packet" >/dev/udp/192.0.2.255/7