Bangun dengan LAN dengan BusyBox?

8

Apakah mungkin untuk mengimplementasikan paket magic wake-on-lan di bash? Saya menggunakan BusyBox yang sudah dikustomisasi dan tidak saya miliki ether-wake. Apakah mungkin untuk menggantinya dengan beberapa perintah shell lainnya, seperti:

wakeonlan 11:22:33:44:55:66
michelemarcon
sumber
wakeonlan , meskipun tampaknya membutuhkan perl yang mungkin tidak ada di kotak sibuk Anda.
jw013
jika Anda dapat menggunakan pythonlihat code.activestate.com/recipes/358449-wake-on-lan dan masukkan aliasini ke dalam.bashrc
harish.venkat
Karena BusyBox memiliki banyak opsi konfigurasi, Anda harus memberi tahu kami apa yang Anda miliki. Juga, apakah Anda yakin bahwa Anda memiliki bash? Bash dan BusyBox adalah kombinasi yang sangat tidak biasa.
Gilles 'SO- stop being evil'
GNU bash, versi 2.05a.0 (1) -release (arm-unknown-linux-gnu)
michelemarcon

Jawaban:

7

Anda memerlukan sesuatu yang mampu mengirim paket Ethernet yang akan dilihat oleh perangkat yang ingin Anda bangun.

The ether-wakeperintah 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 ncimplementasi, 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 \xffdan 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
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Nc saya tidak mendukung -u; syslogd tidak mendukung -l; akhirnya saya tidak punya perangkat / dev / udp. :(
michelemarcon
Dan ya, saya harus bash, periksa komentar saya di atas.
michelemarcon
@michelemarcon Perangkat aneh Anda tampaknya tidak memiliki komponen mendasar dari setiap metode yang dapat saya pikirkan. Saya merekomendasikan kompilasi dan mengunggah biner (BusyBox yang lebih lengkap, misalnya).
Gilles 'SO- stop being evil'
1

/dev/udp dikenali oleh bash dan tidak benar-benar ada di sistem file, jadi cobalah.

Saya pikir Anda dapat menggunakan syslogdtanpa -lswitch, asalkan mendukung -R.

Saya memiliki busybox syslogdwithount -R, tidak ncatau tidak bashdan saya masih terjebak.

bergonz
sumber
0

Saya memiliki server ssh yang menjalankan mimpi HTC lama. Versi busybox saya juga tidak menyertakan ether-wake dan saya tidak cukup ahli untuk mengkompilasi busybox saya sendiri. Untungnya saya berhasil membangunkan PC saya menggunakan:

bash
cat mac2.txt | tr B '\000' >/dev/udp/192.0.1.255/7

Perhatikan bahwa ip siaran berbeda di jaringan saya.

Saya membuat file (mac2.txt) yang berisi paket ajaib pada PC saya dan mendorongnya ke server melalui SFTP. Karena mac saya memiliki byte nol, saya harus menggunakan tr untuk mengganti semua x42 byte dengan 00. Ini berfungsi seperti pesona.

zibo
sumber