Wake-on-LAN

Материал из Википедии — свободной энциклопедии

Перейти к: навигация, поиск

WOL (англ. Wake-on-LAN — пробуждение по локальной сети) — технология, позволяющая удаленно «пробудить» компьютер посредством ЛВС, отправив по сети так называемый «Magic Packet» — пакет, сформированный специальным образом. Этот пакет может быть вставлен в пакеты любых стандартных протоколов верхних уровней, например, UDP, TCP или IPX.

Для работы с Wake On LAN нужно иметь

  • Компьютер с ATX-источником питания и материнской платой, поддерживающей Wake On LAN
  • Сетевой адаптер с поддержкой Wake On LAN
  • Если сетевой адаптер или материнская плата поддерживают шину PCI версии 2.1, то нужен специальный трёхпроводной кабель для соединения Wake-On-LAN разъёмов материнской платы и сетевого адаптера. Если и сетевой адаптер, и материнская плата поддерживают PCI 2.2, то кабель не нужен
  • Программу, способную посылать Magic Packet

Как это работает

Управляемый компьютер находится в дежурном режиме (stand by) и выдаёт питание на сетевой адаптер. Сетевой адаптер находится в режиме пониженного энергопотребления, просматривая все пакеты, приходящие на его MAC-адрес и ничего не отвечая на них. Если одним из пакетов окажется Magic Packet, сетевой адаптер выдаёт сигнал на включение питания компьютера.

Magic Packet

Magic Packet это специальная последовательность байтов, которую для нормального прохождения по локальным сетям можно вставить в пакеты UDP, TCP, IPX. Обычно для WOL пакеты протоколов верхнего уровня рассылают широковещательно, так как в случае динамического присвоения адресов неизвестно, какой, скажем, IP-адрес соответствует какому MAC-адресу. Однако, для корректного прохождения через маршрутизатор, запрещающий широковещательные пакеты, можно послать пакет по какому-то определённому адресу.

Состав Magic Packet

Вначале идет так называемая “цепочка синхронизации”, состоящая из 6 байт FF, а затем — MAC-адрес сетевой платы, повторённый 16 раз. То есть, если бы адрес платы выглядел как 01:02:03:04:05:06, то магический пакет оказался бы таким:

FFFFFFFFFFFF010203040506010203040506010203040506010203040506
010203040506010203040506010203040506010203040506010203040506
010203040506010203040506010203040506010203040506010203040506
010203040506010203040506

Программы, способные посылать Magic Packet

  • Wake-On-LAN Online - включить компьютер удаленно через сеть Интернет - http://www.wakeonlan.ru
  • "WakeOnLan"er :) - Бесплатная утилита для Windows от Команды Торес

Код на Delphi (исправлено)

program WOL;

{$APPTYPE CONSOLE}

uses
  Windows,
  SysUtils,
  IdBaseComponent,
  IdComponent,
  IdUDPBase,
  IdUDPClient,
  IdGlobal;
{$R *.res}

function HexToInt(const s: string): Integer;
begin
  Result := 0;
  if Length(s) <= (SizeOf(LongWord) * 2) then
    Result := StrToInt('$' + s);
end;

procedure ErrMsg(Msg:String);
begin
  MessageBox(0,PChar(Msg),'Wake On LAN',MB_OK or MB_ICONERROR);
end;

procedure WakeUPComputer(aMacAddress: string);
var i,j,k:Byte;
    lBuffer: TBytes; // исправлено здесь (для BDS2006)
    lUDPClient:TIdUDPClient;
begin
  try
    SetLength(lBuffer,102);

    for i := 0 to 5 do begin
      lBuffer[i] := $FF;
    end;

    for i:=1 to 16 do begin
      k:=i*6;
      for j := 0 to 5 do begin
        lBuffer[k+j] := HexToInt(aMacAddress[j*2+1] + aMacAddress[j*2+2]);
      end;
    end;

    lUDPClient:=TIdUDPClient.Create(nil);
    try
      lUDPClient.BroadcastEnabled:=true;
      lUDPClient.Host:='255.255.255.255';
      lUDPClient.Port:=2050;
      lUDPClient.SendBuffer(lBuffer); //исправлено здесь (для BDS2006)
    except
      on E:Exception do ErrMsg(E.Message);
    end;
    lUDPClient.Free;
    SetLength(lBuffer,0); // не забываем чистить память
  except
    on E:Exception do ErrMsg(E.Message);
  end;
end;

procedure ShowHelp;
begin
  MessageBox(0,'Usage: WOL.exe <MAC-address>'#13#10'Example: WOL 000D619AFB55',
    'Wake On LAN',0);
end;

begin
  if ParamCount>0 then WakeUpComputer(ParamStr(1)) else ShowHelp;
end.

При работе с программами следует учесть тот факт, что не все компьютеры включаются сразу после подключения штепсельной вилки в электросеть. Это связано с отсутствием процесса инициализации подачи питания на сетевую карту (компьютер еще не включался и не знает какие устройства следует питать чтобы получать специальные сигналы, среди которых магический пакет). Поэтому следует производить одно предварительное включение вручную. Если существует необходимость избавиться от данной проблемы (например, сервер закрывается на ключ или находится очень далеко), следует установить в BIOS параметр питания "Wake After Power Fail" в значение "ON".