Wake-on-LAN con BusyBox?


8

È possibile implementare il pacchetto magico wake-on-lan in bash? Sto usando un vecchio BusyBox personalizzato e non ce l'ho ether-wake. È possibile sostituirlo con qualche altro comando shell, come:

wakeonlan 11:22:33:44:55:66

wakeonlan , anche se sembra richiedere perl che probabilmente non è nella tua casella.
jw013,

se sei in grado di utilizzare pythonconsulta code.activestate.com/recipes/358449-wake-on-lan e inseriscilo aliasnel tuo.bashrc
harish.venkat,

Poiché BusyBox ha molte opzioni di configurazione, dovresti dirci cosa hai. Inoltre, sei sicuro di avere la bash? Bash e BusyBox è una combinazione estremamente insolita.
Gilles 'SO- smetti di essere malvagio' l'

GNU bash, versione 2.05a.0 (1) -release (arm-unknown-linux-gnu)
michelemarcon,

Risposte:


7

Hai bisogno di qualcosa che sia in grado di inviare un pacchetto Ethernet che verrà visto dal dispositivo che desideri svegliare.

Il ether-wakecomando in BusyBox è esattamente quello che stai cercando. Se il tuo BusyBox non ce l'ha, considera di ricompilare BusyBox per includerlo.

Se si dispone di un netcat sufficientemente "bloaty" (BusyBox può avere una delle due ncimplementazioni, una delle quali gestisce solo TCP), è possibile inviare un pacchetto UDP creato manualmente all'indirizzo di trasmissione del segmento di rete a cui è connesso il dispositivo.

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'altra utility BusyBox che potresti abusare dell'invio di quel pacchetto è syslogd.

syslogd -n -O /dev/null -l 0 -R 192.0.2.255/7 &
syslogd_pid=$!
logger "$wol_packet"
kill $!

Se il MAC contiene un byte null, non sarà possibile creare il pacchetto così facilmente. Scegli un byte che non lo è \xffe non è presente nel MAC, ad esempio \x42( B), e passa attraverso tr.

echo "$wol_packet" | tr B '\000' | nc -u 7 192.0.2.255

Se hai davvero bash (che è estremamente insolito sui dispositivi con BusyBox - sei sicuro di avere davvero bash e non un'altra shell fornita da BusyBox?), Può inviare pacchetti UDP reindirizzando a /dev/udp/$hostname/$port.

echo "$wol_packet" >/dev/udp/192.0.2.255/7

Il mio nc non supporta -u; syslogd non supporta -l; finalmente non ho dispositivi / dev / udp. :(
michelemarcon,

E sì, ho bash, controlla il mio commento sopra.
Michelemarcon,

@michelemarcon Il tuo strano dispositivo sembra mancare della componente fondamentale di ogni metodo che mi viene in mente. Consiglio di compilare e caricare un file binario (un BusyBox più completo, ad esempio).
Gilles 'SO- smetti di essere malvagio' il

1

/dev/udp è riconosciuto da bash e non esiste davvero nel filesystem, quindi provalo.

Penso che puoi usare syslogdsenza -linterruttore, purché supporti -R.

Ho la syslogdscatola occupata con withount -R, no ncbashe sono ancora bloccato.


0

Ho un server SSH in esecuzione sul vecchio sogno HTC. Anche la mia versione di busybox non includeva ether-wake e non sono abbastanza abile da compilare il mio busybox. Fortunatamente sono riuscito a riattivare il mio PC usando:

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

Si noti che l'ip di trasmissione è diverso nella mia rete.

Ho creato il file (mac2.txt) contenente il pacchetto magico sul mio PC e l'ho inviato al server tramite SFTP. Poiché il mio mac ha byte nulli, devo usare tr per sostituire tutti i byte x42 con 00. Ha funzionato come un incantesimo.


Perché l' uso inutile di Cat ?
Rahmu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.