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
- Network Shutdown Tool - http://abbyte.com
- Wake-On-LAN Online - включить компьютер удаленно через сеть Интернет - http://www.wakeonlan.ru
- AMD Magic Packet Utility - http://www.amd.com/us-en/assets/content_type/utilities/magic_pkt.exe
- Wake On Lan for Windows GUI/Command Line, Pocket PC и другие - http://www.depicus.com/wake-on-lan/
- "WakeOnLan"er :) - Бесплатная утилита для Windows от Команды Торес
- Для Maemo 4 (Nokia Internet Tablet N800/N810) - http://fernando.mercado.googlepages.com/maemowol
Код на 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".

