Wake-on-LAN con BusyBox?

8

¿Es posible implementar el paquete mágico wake-on-lan en bash? Estoy usando un BusyBox viejo y personalizado y no tengo ether-wake. ¿Es posible reemplazarlo con algún otro comando de shell, como:

wakeonlan 11:22:33:44:55:66
michelemarcon
fuente
wakeonlan , aunque parece requerir perl que probablemente no esté en tu busybox.
jw013
si puede usar pythonver code.activestate.com/recipes/358449-wake-on-lan y poner aliasesto en su.bashrc
harish.venkat
Dado que BusyBox tiene muchas opciones de configuración, debe decirnos qué tiene. Además, ¿estás seguro de que tienes bash? Bash y BusyBox es una combinación extremadamente inusual.
Gilles 'SO- deja de ser malvado'
GNU bash, versión 2.05a.0 (1) -release (arm-unknown-linux-gnu)
michelemarcon

Respuestas:

7

Necesita algo que sea capaz de enviar un paquete Ethernet que será visto por el dispositivo que desea activar.

El ether-wakecomando en BusyBox es exactamente lo que buscas. Si su BusyBox no lo tiene, considere volver a compilar BusyBox para incluirlo.

Si tiene un netcat suficientemente "hinchado" (BusyBox puede tener una de dos ncimplementaciones, una de las cuales maneja solo TCP), puede enviar un paquete UDP diseñado manualmente a la dirección de transmisión del segmento de red al que está conectado el 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

Otra utilidad de BusyBox que podría abusar para enviar ese paquete es syslogd.

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

Si el MAC contiene un byte nulo, no podrá crear el paquete tan fácilmente. Elija un byte que no esté \xffy que no esté en el MAC, digamos \x42( B), y canalice tr.

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

Si realmente tiene bash (lo cual es extremadamente inusual en dispositivos con BusyBox, ¿está seguro de que realmente tiene bash y no otro shell proporcionado por BusyBox?), Puede enviar paquetes UDP al redirigirlos /dev/udp/$hostname/$port.

echo "$wol_packet" >/dev/udp/192.0.2.255/7
Gilles 'SO- deja de ser malvado'
fuente
Mi nc no admite -u; syslogd no es compatible con -l; finalmente no tengo dispositivos / dev / udp. :(
michelemarcon
Y sí, tengo bash, mira mi comentario arriba.
michelemarcon
@michelemarcon Su extraño dispositivo parece carecer del componente fundamental de todos los métodos que se me ocurren. Recomiendo compilar y cargar un binario (un BusyBox más completo, por ejemplo).
Gilles 'SO- deja de ser malvado'
1

/dev/udp es reconocido por bash y realmente no existe en el sistema de archivos, así que pruébalo.

Creo que puede usar syslogdsin -linterruptor, siempre que sea compatible -R.

Tengo busybox con syslogdwithount -R, no ncni bashy todavía estoy atascado.

bergonz
fuente
0

Tengo un servidor ssh ejecutándose en el viejo sueño de HTC. Mi versión de busybox tampoco incluía ether-wake y no tengo la habilidad suficiente para compilar mi propia busybox. Afortunadamente logré despertar mi PC usando:

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

Tenga en cuenta que la transmisión IP es diferente en mi red.

Creé el archivo (mac2.txt) que contenía el paquete mágico en mi PC y lo envié al servidor a través de SFTP. Debido a que mi mac tiene un byte nulo, tengo que usar tr para sustituir todos los x42 bytes con 00. Funcionó de maravilla.

zibo
fuente
¿Por qué el uso inútil del gato ?
rahmu