Ответ 1
минимальные требования Я могу подумать:
- Bash поддержка расширения скобок (я думаю, что это v3.5.1 и выше).
- Команда sed (1).
- NetCat.
Предполагая, что:
- пакет WOL для локальной сети, переданный по адресу 255.255.255.255.
Командная строка :
echo -e $(echo $(printf 'f%.0s' {1..12}; printf "$(echo $MAC | sed 's/://g')%.0s" {1..16}) | sed -e 's/../\\x&/g') | nc -w1 -u -b 255.255.255.255 4000
Заменить $MAC
на MAC-адрес назначения. Или, на этот раз в команде с двумя слоями:-):
MAC=11:22:33:44:55:66
echo -e $(echo $(printf 'f%.0s' {1..12}; printf "$(echo $MAC | sed 's/://g')%.0s" {1..16}) | sed -e 's/../\\x&/g') | nc -w1 -u -b 255.255.255.255 4000
Итак, в более общей нотации:
MAC=11:22:33:44:55:66
Broadcast=255.255.255.255
PortNumber=4000
echo -e $(echo $(printf 'f%.0s' {1..12}; printf "$(echo $MAC | sed 's/://g')%.0s" {1..16}) | sed -e 's/../\\x&/g') | nc -w1 -u -b $Broadcast $PortNumber
Пояснения:
- Волшебный пакет WOL состоит из
ffffffffffff
(12 разf
), за которым следует 16-кратный MAC-адрес назначения без двоеточий (:
). - Команда
sed
используется здесь для удаления двоеточий (:
) из MAC и для добавления спецификатора\x
hex > (так что11
становится\x11
,22
становится\x22
... и т.д.) перед отправкой строки в сетевой стек. - Пакет поддельного следа по локальной сети отправляется в сетевой стек , который связывает его с NetCat. SoCat можно использовать вместо этого (синтаксис будет отличаться, конечно).
Протестировано работает на Ubuntu, Kali и даже CygWin (Windows 7 SP 1 64 бит).
Рассматривать:
- Версия CygWin NetCat не нужна для параметра
-b
. - Версия NetCat OpenBSD имеет ошибку на сегодняшний день (Juy 2015) для отправки широковещательных данных (
-b
), поэтому вам придется заменить ее на версию NetCat Traditional (пакет netcat-традиционный на apt-get installers). - В этом примере используется UDP-порт 4.000. определенный номер порта, по-видимому, не важен для WOL.
- Вышеуказанная однострочная команда bash должна работать также для пробуждения по локальной сети через интернет. В этом случае замените адрес
$Broadcast
целевым общедоступным IP-адресом и откройте/переместите указанный$PortNumber
(UDP) в пункт назначения. -
echo -e
можно заменить наprintf
.
Волновая цепочка WOL для приведенного выше примера:
FFFFFFFFFFFF112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566
(1) Ну, действительно, sed
явно не требуется. Он используется здесь для удаления ':' и добавления \x
к каждой паре символов в закодированной цепочке магического пакета. Я знаю, что есть способы заменить sed
на некоторое расширение оболочки или так.