Wake-on-LAN với BusyBox?


8

Có thể thực hiện gói ma thuật đánh thức trong bash không? Tôi đang sử dụng một BusyBox cũ, tùy chỉnh và không có ether-wake. Có thể thay thế nó bằng một số lệnh shell khác, như:

wakeonlan 11:22:33:44:55:66

Wakeonlan , mặc dù có vẻ như yêu cầu perl mà có lẽ không có trong hộp bận rộn của bạn.
jw013

nếu bạn có thể sử dụng pythonthấy code.activestate.com/recipes/358449-wake-on-lan và đưa aliascho điều này trong của bạn.bashrc
harish.venkat

Vì BusyBox có rất nhiều tùy chọn cấu hình, bạn nên cho chúng tôi biết bạn có gì. Ngoài ra, bạn có chắc chắn rằng bạn có bash? Bash và BusyBox là một sự kết hợp cực kỳ bất thường.
Gilles 'SO- ngừng trở nên xấu xa'

GNU bash, phiên bản 2.05a.0 (1) -release (arm-unknown-linux-gnu)
michelemarcon

Câu trả lời:


7

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-wakelệ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 nctriể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 \xffvà 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

Nc của tôi không hỗ trợ -u; syslogd không hỗ trợ -l; cuối cùng tôi không có thiết bị / dev / udp. :(
michelemarcon

Và vâng, tôi có bash, kiểm tra nhận xét của tôi ở trên.
michelemarcon

@michelemarcon Thiết bị lạ của bạn dường như thiếu thành phần cơ bản của mọi phương pháp tôi có thể nghĩ ra. Tôi khuyên bạn nên biên dịch và tải lên tệp nhị phân (ví dụ BusyBox hoàn chỉnh hơn).
Gilles 'SO- ngừng trở nên xấu xa'

1

/dev/udp được nhận ra bởi bash và không thực sự tồn tại trong hệ thống tập tin, vì vậy hãy dùng thử.

Tôi nghĩ bạn có thể sử dụng syslogdmà không cần -lchuyển đổi, miễn là nó hỗ trợ -R.

Tôi có busybox với syslogdwithount -R, không có nccũng không bashvà tôi vẫn còn bị mắc kẹt.


0

Tôi có một máy chủ ssh chạy trên giấc mơ cũ của HTC. Phiên bản busybox của tôi cũng không bao gồm ether-aw và tôi không đủ kỹ năng để biên dịch busybox của riêng mình. May mắn thay, tôi đã đánh thức được PC của mình bằng cách sử dụng:

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

Lưu ý rằng ip quảng bá là khác nhau trong mạng của tôi.

Tôi đã tạo tệp (mac2.txt) có chứa gói ma thuật trên PC của mình và đẩy nó đến máy chủ thông qua SFTP. Vì máy mac của tôi có byte rỗng nên tôi phải sử dụng tr để thay thế tất cả x42 byte bằng 00. Nó hoạt động như bùa mê.


Tại sao việc sử dụng mèo vô dụng ?
rahmu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.