Busybox
使用 BusyBox 進行區域網路喚醒?
是否可以在 bash 中實現網路喚醒魔術包?我正在使用舊的定制 BusyBox,但沒有
ether-wake
. 是否可以用其他一些shell命令替換它,例如:wakeonlan 11:22:33:44:55:66
您需要能夠發送乙太網數據包的東西,您要喚醒的設備可以看到該數據包。
BusyBox 中的
ether-wake
命令正是您所追求的。如果您的 BusyBox 沒有它,請考慮重新編譯 BusyBox 以包含它。如果你有一個足夠“臃腫”的 netcat(BusyBox 可以有兩種
nc
實現之一,其中一種只處理 TCP),你可以發送一個手工製作的 UDP 數據包到設備連接的網段的廣播地址。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
您可以濫用發送該數據包的另一個 BusyBox 實用程序是
syslogd
.syslogd -n -O /dev/null -l 0 -R 192.0.2.255/7 & syslogd_pid=$! logger "$wol_packet" kill $!
如果 MAC 包含一個空字節,您將無法如此輕鬆地製作數據包。
\xff
選擇一個不在 MAC 中且不在 MAC 中的字節,例如\x42
(B
),然後通過tr
.echo "$wol_packet" | tr B '\000' | nc -u 7 192.0.2.255
如果你真的有 bash(這在帶有 BusyBox 的設備上非常不尋常——你確定你真的有 bash,而不是 BusyBox 提供的另一個 shell?),它可以通過重定向到
/dev/udp/$hostname/$port
.echo "$wol_packet" >/dev/udp/192.0.2.255/7