Anda memerlukan sesuatu yang mampu mengirim paket Ethernet yang akan dilihat oleh perangkat yang ingin Anda bangun.
The ether-wake
perintah dalam BusyBox adalah persis apa yang Anda harapkan. Jika BusyBox Anda tidak memilikinya, pertimbangkan untuk mengkompilasi ulang BusyBox untuk memasukkannya.
Jika Anda memiliki netcat "bloaty" yang cukup (BusyBox dapat memiliki satu dari dua nc
implementasi, satu di antaranya hanya menangani TCP), Anda dapat mengirim paket UDP yang dibuat secara manual ke alamat broadcast segmen jaringan tempat perangkat terhubung.
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
Utilitas BusyBox lain yang dapat Anda penyalahgunaan untuk mengirim paket itu syslogd
.
syslogd -n -O /dev/null -l 0 -R 192.0.2.255/7 &
syslogd_pid=$!
logger "$wol_packet"
kill $!
Jika MAC berisi byte nol, Anda tidak akan dapat membuat paket dengan mudah. Pilih byte yang tidak \xff
dan itu tidak ada di MAC, katakan \x42
( B
), dan pipa melalui tr
.
echo "$wol_packet" | tr B '\000' | nc -u 7 192.0.2.255
Jika Anda benar-benar memiliki bash (yang sangat tidak biasa pada perangkat dengan BusyBox - Anda yakin Anda benar-benar memiliki bash, dan bukan shell lain yang disediakan oleh BusyBox?), Ia dapat mengirim paket UDP dengan mengarahkan kembali ke /dev/udp/$hostname/$port
.
echo "$wol_packet" >/dev/udp/192.0.2.255/7