След на LAN с BusyBox?

Сценарий оболочки обычно выполняется в отдельном экземпляре программной оболочки, /bin/sh в этом случае. Ваш pushd управляйте влияет на рабочий каталог той подоболочки только. Если бы это было иначе, то любая программа, которую Вы запустили от оболочки, могла бы смешать с рабочим каталогом Вашей оболочки.

Для выполнения того сценария в текущей оболочке скажите это вместо этого:

$ . my-command somedir

или, больше verbosely:

$ source my-command somedir

Чтобы заставить ее появиться, что Ваша программа работает как любой другой, можно использовать псевдоним:

$ alias mycmd='source my-command'
$ mycmd /bin
$ pwd
/bin
8
11.02.2012, 23:51
3 ответа

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

ether-wake команда в BusyBox точно, что Вы после. Если Ваш BusyBox не имеет его, считайте перекомпиляцию BusyBox для включения его.

Если Вы имеете достаточно “bloaty” 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

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

echo "$wol_packet" >/dev/udp/192.0.2.255/7
7
27.01.2020, 20:12
  • 1
    Мой nc не поддерживает-u; syslogd не поддерживает-l; наконец у меня нет/dev/udp устройств. :( –  michelemarcon 13.02.2012, 12:44
  • 2
    И да, у меня есть удар, проверяют мой комментарий выше. –  michelemarcon 13.02.2012, 12:45
  • 3
    @michelemarcon Ваше странное устройство, кажется, испытывает недостаток в фундаментальном компоненте каждого метода, о котором я могу думать. Я рекомендую компилировать и загрузить двоичный файл (более полный BusyBox, например). А-ч –  Gilles 'SO- stop being evil' 14.02.2012, 08:47

/dev/udp распознан ударом и действительно не существует в файловой системе, поэтому дает ему попытку.

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

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

1
27.01.2020, 20:12

У меня есть ssh сервер, работающий на старой мечте HTC. Моя версия busybox также не включала след эфира, и я не достаточно квалифицирован для компиляции моего собственного busybox. К счастью, мне удалось разбудить мое использование ПК:

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

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

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

0
27.01.2020, 20:12

Теги

Похожие вопросы