Ativar na LAN com o BusyBox?

8

É possível implementar o pacote mágico wake-on-lan no bash? Estou usando um BusyBox antigo personalizado e não tenho ether-wake. É possível substituí-lo por algum outro comando do shell, como:

wakeonlan 11:22:33:44:55:66
michelemarcon
fonte
wakeonlan , embora pareça exigir perl, o que provavelmente não está no seu busybox.
Jw013
se você é capaz de usar, pythonconsulte code.activestate.com/recipes/358449-wake-on-lan e coloque aliasisso no seu.bashrc
harish.venkat
Como o BusyBox tem muitas opções de configuração, você deve nos dizer o que tem. Além disso, você tem certeza de que tem o bash? Bash e BusyBox é uma combinação extremamente incomum.
Gilles 'SO- stop be evil'
GNU bash, versão 2.05a.0 (1) -release (arm-unknown-linux-gnu)
michelemarcon

Respostas:

7

Você precisa de algo capaz de enviar um pacote Ethernet que será visto pelo dispositivo que você deseja ativar.

O ether-wakecomando no BusyBox é exatamente o que você procura. Se o seu BusyBox não o possuir, considere recompilar o BusyBox para incluí-lo.

Se você tiver um netcat suficientemente “inchado” (o BusyBox pode ter uma das duas ncimplementações, uma das quais lida apenas com TCP), você pode enviar um pacote UDP criado manualmente para o endereço de broadcast do segmento de rede ao qual o dispositivo está conectado.

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

Outro utilitário BusyBox que você pode abusar ao enviar esse pacote é syslogd.

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

Se o MAC contiver um byte nulo, você não poderá criar o pacote tão facilmente. Escolha um byte que não esteja \xffe que não esteja no MAC, digamos \x42( B), e passe através dele tr.

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

Se você realmente possui o bash (o que é extremamente incomum em dispositivos com o BusyBox - você tem certeza de que realmente possui o bash, e não outro shell fornecido pelo BusyBox?), Ele pode enviar pacotes UDP redirecionando para /dev/udp/$hostname/$port.

echo "$wol_packet" >/dev/udp/192.0.2.255/7
Gilles 'SO- parar de ser mau'
fonte
Meu nc não suporta -u; O syslogd não suporta -l; finalmente não tenho dispositivos / dev / udp. :(
michelemarcon
E sim, tenho bash, verifique meu comentário acima.
Michelemarcon
@michelemarcon Seu dispositivo estranho parece não ter o componente fundamental de todos os métodos que consigo imaginar. Eu recomendo compilar e carregar um binário (um BusyBox mais completo, por exemplo).
Gilles 'SO- stop be evil'
1

/dev/udp é reconhecido pelo bash e realmente não existe no sistema de arquivos, então tente.

Eu acho que você pode usar syslogdsem -lswitch, desde que ele suporte -R.

Tenho busybox com syslogdwithount -R, não, ncnem bashe ainda estou preso.

Bergonz
fonte
0

Eu tenho um servidor ssh rodando no antigo sonho HTC. Minha versão do busybox também não incluía o despertar etéreo e não tenho habilidade suficiente para compilar meu próprio busybox. Felizmente, consegui ativar meu PC usando:

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

Observe que o IP de transmissão é diferente na minha rede.

Criei o arquivo (mac2.txt) que contém o pacote mágico no meu PC e o enviei ao servidor via SFTP. Como meu mac possui byte nulo, tenho que usar tr para substituir todos os bytes x42 por 00. Funcionou como um encanto.

zibo
fonte
Por que o uso inútil do gato ?
Rahmu # 11/13