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

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

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.


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.


¿Por qué el uso inútil del gato ?
rahmu
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.