Busybox

使用 BusyBox 進行區域網路喚醒?

  • September 11, 2013

是否可以在 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

引用自:https://unix.stackexchange.com/questions/31376