Wake-on-LAN avec BusyBox?

8

Est-il possible d'implémenter le paquet magique wake-on-lan dans bash? J'utilise une ancienne BusyBox personnalisée et je n'en ai pas ether-wake. Est-il possible de le remplacer par une autre commande shell, comme:

wakeonlan 11:22:33:44:55:66
michelemarcon
la source
wakeonlan , bien qu'il semble nécessiter perl qui n'est probablement pas dans votre busybox.
jw013
si vous êtes en mesure d'utiliser, pythonvoir code.activestate.com/recipes/358449-wake-on-lan et mettez alias-le dans votre.bashrc
harish.venkat
Puisque BusyBox a beaucoup d'options de configuration, vous devez nous dire ce que vous avez. De plus, êtes-vous sûr d'avoir bash? Bash et BusyBox est une combinaison extrêmement inhabituelle.
Gilles 'SO- arrête d'être méchant'
GNU bash, version 2.05a.0 (1) -release (arm-unknown-linux-gnu)
michelemarcon

Réponses:

7

Vous avez besoin de quelque chose capable d'envoyer un paquet Ethernet qui sera vu par l'appareil que vous souhaitez réveiller.

La ether-wakecommande dans BusyBox est exactement ce que vous recherchez. Si votre BusyBox ne l'a pas, pensez à recompiler BusyBox pour l'inclure.

Si vous avez un netcat suffisamment «gonflé» (BusyBox peut avoir l'une des deux ncimplémentations, dont une gère uniquement TCP), vous pouvez envoyer un paquet UDP conçu manuellement à l'adresse de diffusion du segment de réseau auquel l'appareil est connecté.

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 autre utilitaire BusyBox que vous pourriez abuser en envoyant ce paquet est syslogd.

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

Si le MAC contient un octet nul, vous ne pourrez pas créer le paquet si facilement. Choisissez un octet qui n'est pas \xffet qui n'est pas dans le MAC, disons \x42( B), et dirigez-le tr.

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

Si vous avez vraiment bash (ce qui est extrêmement inhabituel sur les appareils avec BusyBox - êtes-vous sûr que vous avez vraiment bash, et pas un autre shell fourni par BusyBox?), Il peut envoyer des paquets UDP en redirigeant vers /dev/udp/$hostname/$port.

echo "$wol_packet" >/dev/udp/192.0.2.255/7
Gilles 'SO- arrête d'être méchant'
la source
Mon nc ne prend pas en charge -u; syslogd ne prend pas en charge -l; enfin, je n'ai pas de périphériques / dev / udp. :(
michelemarcon
Et oui, j'ai bash, vérifiez mon commentaire ci-dessus.
michelemarcon
@michelemarcon Votre étrange appareil semble manquer de la composante fondamentale de chaque méthode à laquelle je peux penser. Je recommande de compiler et de télécharger un binaire (une BusyBox plus complète, par exemple).
Gilles 'SO- arrête d'être méchant'
1

/dev/udp est reconnu par bash et n'existe pas vraiment dans le système de fichiers, alors essayez.

Je pense que vous pouvez utiliser syslogdsans -linterrupteur, tant qu'il prend en charge -R.

J'ai une syslogdboîte occupée avec un montant -R, non ncni bashet je suis toujours coincé.

bergonz
la source
0

J'ai un serveur ssh fonctionnant sur l'ancien rêve HTC. Ma version de busybox ne comprenait pas non plus d'éther-wake et je ne suis pas assez qualifié pour compiler ma propre busybox. Heureusement, j'ai réussi à réveiller mon PC en utilisant:

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

Notez que l'IP de diffusion est différente sur mon réseau.

J'ai créé le fichier (mac2.txt) contenant le paquet magique sur mon PC et l'ai poussé vers le serveur via SFTP. Parce que mon mac a zéro octet, je dois utiliser tr pour remplacer tous les x42 octets par 00. Cela a fonctionné comme un charme.

zibo
la source
Pourquoi l' utilisation inutile du chat ?
rahmu