Wake-on-LAN mit BusyBox?

8

Ist es möglich, das Wake-on-Lan-Magic-Paket in Bash zu implementieren? Ich verwende eine alte, angepasste BusyBox und habe keine ether-wake. Ist es möglich, es durch einen anderen Shell-Befehl zu ersetzen, wie zum Beispiel:

wakeonlan 11:22:33:44:55:66
michelemarcon
quelle
Wakeonlan , obwohl es Perl zu erfordern scheint, das wahrscheinlich nicht in Ihrer Busybox ist.
jw013
Wenn Sie in der Lage sind, verwenden pythonSie code.activestate.com/recipes/358449-wake-on-lan und setzen Sie aliasdies in Ihre.bashrc
harish.venkat
Da BusyBox viele Konfigurationsoptionen bietet, sollten Sie uns mitteilen, was Sie haben. Bist du dir auch sicher, dass du Bash hast? Bash and BusyBox ist eine äußerst ungewöhnliche Kombination.
Gilles 'SO - hör auf böse zu sein'
GNU Bash, Version 2.05a.0 (1) -Veröffentlichung (Arm-Unbekannt-Linux-Gnu)
Michelemarcon

Antworten:

7

Sie benötigen etwas, das ein Ethernet-Paket senden kann, das von dem Gerät gesehen wird, das Sie aktivieren möchten.

Der ether-wakeBefehl in BusyBox ist genau das, wonach Sie suchen. Wenn Ihre BusyBox nicht über diese verfügt, sollten Sie BusyBox neu kompilieren, um sie einzuschließen.

Wenn Sie über einen ausreichend "aufgeblähten" Netcat verfügen (BusyBox kann eine von zwei ncImplementierungen haben, von denen eine nur TCP verarbeitet), können Sie ein manuell erstelltes UDP-Paket an die Broadcast-Adresse des Netzwerksegments senden, mit dem das Gerät verbunden ist.

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

Ein weiteres BusyBox-Dienstprogramm, das Sie beim Senden dieses Pakets missbrauchen könnten, ist syslogd.

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

Wenn der MAC ein Null-Byte enthält, können Sie das Paket nicht so einfach erstellen. Wählen Sie ein Byte aus, das nicht \xffim MAC enthalten ist, z. B. \x42( B), und leiten Sie es durch tr.

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

Wenn Sie wirklich Bash haben (was auf Geräten mit BusyBox äußerst ungewöhnlich ist - sind Sie sicher, dass Sie wirklich Bash haben und keine andere von BusyBox bereitgestellte Shell?), Kann es UDP-Pakete durch Umleiten an senden /dev/udp/$hostname/$port.

echo "$wol_packet" >/dev/udp/192.0.2.255/7
Gilles 'SO - hör auf böse zu sein'
quelle
Mein nc unterstützt -u nicht; syslogd unterstützt -l nicht; Endlich habe ich keine / dev / udp-Geräte. :(
Michelemarcon
Und ja, ich habe Bash, überprüfen Sie meinen Kommentar oben.
Michelemarcon
@michelemarcon Ihrem seltsamen Gerät scheint die grundlegende Komponente jeder Methode zu fehlen, die mir einfällt. Ich empfehle, eine Binärdatei zu kompilieren und hochzuladen (z. B. eine vollständigere BusyBox).
Gilles 'SO - hör auf böse zu sein'
1

/dev/udp wird von bash erkannt und ist im Dateisystem nicht wirklich vorhanden. Probieren Sie es aus.

Ich denke, Sie können syslogdohne -lSchalter verwenden, solange es unterstützt -R.

Ich habe geschäftige Box mit syslogdWithount -R, nein ncnoch bashund ich stecke immer noch fest.

bergonz
quelle
0

Ich habe einen SSH-Server, der auf einem alten HTC-Traum läuft. Meine Version von Busybox enthielt auch kein Ether-Wake und ich bin nicht geschickt genug, um meine eigene Busybox zu kompilieren. Zum Glück konnte ich meinen PC mit folgenden Funktionen aktivieren:

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

Beachten Sie, dass die Broadcast-IP in meinem Netzwerk unterschiedlich ist.

Ich habe die Datei (mac2.txt) mit dem magischen Paket auf meinem PC erstellt und per SFTP auf den Server übertragen. Da mein Mac ein Null-Byte hat, muss ich tr verwenden, um alle x42-Bytes durch 00 zu ersetzen. Es hat wie ein Zauber funktioniert.

Zibo
quelle
Warum der nutzlose Gebrauch von Katze ?
Rahm