Bạn cần một cái gì đó có khả năng gửi một gói Ethernet mà thiết bị bạn muốn thức dậy sẽ nhìn thấy.
Các ether-wake
lệnh trong BusyBox là chính xác những gì bạn đang sau. Nếu BusyBox của bạn không có nó, hãy xem xét biên dịch lại BusyBox để đưa nó vào.
Nếu bạn có một mạng mèo đầy đủ, có thể có một trong hai nc
triển khai, một trong số đó chỉ xử lý TCP), bạn có thể gửi gói UDP được tạo thủ công tới địa chỉ quảng bá của phân đoạn mạng mà thiết bị được kết nối.
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
Một tiện ích BusyBox khác mà bạn có thể lạm dụng để gửi gói đó là syslogd
.
syslogd -n -O /dev/null -l 0 -R 192.0.2.255/7 &
syslogd_pid=$!
logger "$wol_packet"
kill $!
Nếu MAC chứa byte rỗng, bạn sẽ không thể tạo gói dễ dàng như vậy. Chọn một byte không phải \xff
và không có trong MAC, giả sử \x42
( B
) và chuyển qua tr
.
echo "$wol_packet" | tr B '\000' | nc -u 7 192.0.2.255
Nếu bạn thực sự có bash (điều cực kỳ bất thường trên các thiết bị có BusyBox - bạn có chắc là bạn thực sự có bash và không phải là một vỏ khác do BusyBox cung cấp?), Nó có thể gửi các gói UDP bằng cách chuyển hướng đến /dev/udp/$hostname/$port
.
echo "$wol_packet" >/dev/udp/192.0.2.255/7