Пробуждение по локальной сети с BusyBox?

8

Можно ли реализовать волшебный пакет wake-on-lan в bash? Я использую старый, настроенный BusyBox и не имею ether-wake. Можно ли заменить его какой-нибудь другой командой оболочки, например:

wakeonlan 11:22:33:44:55:66
michelemarcon
источник
wakeonlan , хотя, кажется, требуется perl, который, вероятно, отсутствует в вашем busybox.
jw013
если вы можете использовать, pythonпосмотрите code.activestate.com/recipes/358449-wake-on-lan и добавьтеalias это в свой.bashrc
harish.venkat
Поскольку BusyBox имеет много опций конфигурации, вы должны сообщить нам, что у вас есть. Кроме того, вы уверены, что у вас есть Bash? Bash и BusyBox - чрезвычайно необычная комбинация.
Жиль "ТАК - перестань быть злым"
GNU bash, версия 2.05a.0 (1) -релиз (arm-unknown-linux-gnu)
michelemarcon

Ответы:

7

Вам нужно что-то, что способно отправить пакет Ethernet, который будет виден на устройстве, которое вы хотите активировать.

Команда ether-wakeв BusyBox - это именно то, что вам нужно. Если ваш 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, скажем \x42( B), и передайте по каналу tr.

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

Если у вас действительно есть bash (что крайне необычно для устройств с BusyBox - вы уверены, что у вас действительно есть bash, а не другая оболочка, предоставленная BusyBox?), Он может отправлять UDP-пакеты путем перенаправления на /dev/udp/$hostname/$port.

echo "$wol_packet" >/dev/udp/192.0.2.255/7
Жиль "ТАК - перестань быть злым"
источник
Мой nc не поддерживает -u; syslogd не поддерживает -l; наконец, у меня нет устройств / dev / udp. :(
michelemarcon
И да, у меня есть Bash, проверьте мой комментарий выше.
michelemarcon
@michelemarcon Ваше странное устройство, кажется, испытывает недостаток в фундаментальном компоненте каждого метода, о котором я могу думать. Я рекомендую компилировать и загружать двоичный файл (например, более полный BusyBox).
Жиль "ТАК - перестань быть злым"
1

/dev/udp распознается bash и на самом деле не существует в файловой системе, так что попробуйте.

Я думаю, что вы можете использовать syslogdбез -lвыключателя, пока он поддерживает -R.

У меня есть busybox syslogdwithount -R, нет ncни, bashи я все еще застрял.

bergonz
источник
0

У меня есть SSH-сервер, работающий на старой мечте HTC. Моя версия busybox также не включала ether-wake, и я не достаточно опытен, чтобы скомпилировать свой собственный busybox. К счастью, мне удалось разбудить мой компьютер, используя:

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

Обратите внимание, что широковещательный IP отличается в моей сети.

Я создал файл (mac2.txt), содержащий магический пакет на моем ПК, и отправил его на сервер через SFTP. Поскольку мой mac имеет нулевой байт, я должен использовать tr для замены всех байтов x42 на 00. Это работает как шарм.

Зибо
источник