Wake-on-LAN

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 14. října 2014; kontroly vyžadují 15 úprav .

Wake-on-LAN ( WOL ; přeloženo z angličtiny.  - „Probuzení na [signál z] místní sítě “) - technologie, která vám umožňuje vzdáleně zapnout počítač odesláním speciální sekvence bajtů přes místní síť - datový paket (tzv. magic packet  - "magický paket", viz níže ). Tento paket lze vložit do paketů všech standardních protokolů vyšší úrovně , jako je UDP nebo IPX .

Požadavky na počítač Wake-on-LAN

Také musíte být schopni odeslat magický paket do spravovaného počítače. To lze provést například pomocí jiného počítače s příslušným programem (viz příklady níže ).

Jak to funguje

Řízený počítač je v pohotovostním režimu ( angl.  stand-by - režim stanovený specifikací ATX , ve kterém je aktivní pouze pohotovostní režim + 5VSB všech výstupních obvodů zdroje) a napájí čip BIOS a síťový adaptér [1] . Síťový adaptér je v režimu nízké spotřeby, zatímco jeho mikrokontrolér analyzuje všechny pakety přicházející na odpovídající MAC adresu , aniž by na ně reagoval. Pokud se některý z paketů ukáže jako magic packet , síťový adaptér vydá signál k zapnutí napájení počítače.

Magický balíček

Angličtina  Magic packet je speciální posloupnost bajtů, které lze vložit do  paketů transportní vrstvy , které nevyžadují připojení (například protokol UDP nebo starší IPX ) pro normální procházení lokálními sítěmi. Pro Wake-on-LAN se obvykle vysílají pakety protokolu vyšší vrstvy, protože v případě dynamického přidělování adres není známo, která IP adresa odpovídá které MAC adrese. Abyste však správně prošli směrovačem, který zakazuje vysílání paketů, můžete paket odeslat na určitou konkrétní adresu.

Na začátku paketu je tzv. synchronizační řetězec: 6 bajtů rovných 0xFF. Poté - 16krát opakovaná MAC adresa síťové karty . To znamená, že kdyby adresa desky vypadala jako 01:02:03:04:05:06 , pak by magický paket vypadal takto:

FFFFFFFFFFFF010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506

Příklady

Programy

Zdroje

Úkol napsat program, který odešle magický paket, je poměrně jednoduchý a často se poskytuje jako návod, když se učíte základy práce v síti. Níže jsou uvedeny dva příklady takových programů ve zdrojovém kódu:

Kód v C# pomocí System ; pomocí System.Net.Sockets ; pomocí System.Net ; pomocí System.Collections.Generic ; jmenný prostor Wol { class Program { static void Main ( string [] args ) { using ( UdpClient udpClient = new UdpClient ()) { Konzole . WriteLine ( "Zadejte mac adresu" ); byte [] mac = StrToMac ( Console.ReadLine ( ) ); udpClient . Odeslat ( mac , mac . Délka , nový IPEndPoint ( IPAddress . Broadcast , 9 )); } } statický byte [] StrToMac ( string s ) { List < byte > arr = new List < byte >( 102 ); řetězec [] macs = s . Rozdělit ( ' ' , ':' , '-' ); for ( int i = 0 ; i < 6 ; i ++) arr . Přidat ( 0xff ) ; for ( int j = 0 ; j < 16 ; j ++) pro ( int i = 0 ; i < 6 ; i ++) arr . Přidat ( Convert.ToByte ( macs [ i ] , 16 ) ); vrátit arr . ToArray (); } } } Kód v Delphi

Upraveno pro verzi Delphi7.

jednotka WOL ; rozhraní používá Windows , zprávy , SysUtils , varianty , třídy , grafiku , ovládací prvky , formuláře , dialogy , IdBaseComponent , IdComponent , IdUDPBase , IdUDPClient , IdGlobal , StdCtrls ; typ TForm1 = class ( TForm ) Edit1 : TEdit ; Tlačítko1 : TButton ; procedure Button1Click ( Sender : TObject ) ; private { Soukromá prohlášení } public { Veřejná prohlášení } end ; var Form1 : TForm1 ; implementace {$R *.dfm} typ TMACAadresa = zabalený případ celé číslo 0 : ( s1 , s2 , s3 , s4 , s5 , s6 : byte ; ) ; _ 1 : ( cmp1 : slovo ; cmp2 : celé číslo ; ) ; konec ; TWakeupMagicPacket = sbalený záznam FillFF : pole [ 0 .. 5 ] byte ; _ Mac : pole [ 0 .. 15 ] adresy TMACA ; konec ; function TryStrToMac ( str : string ; var mac : TMACAddress ) : boolean ; var a , b : celé číslo ; const ToHex = '0123456789ABCDEF' ; begin Vysledek := false ; str := AnsiUpperCase ( trim ( str )) ; if length ( str ) < 17 then begin mac . cmp1 := 0 ; mac . cmp2 := 0 ; výstup ; konec ; a := pos ( str [ 1 ] , ToHex ) - 1 ; b := pos ( str [ 2 ] , ToHex ) - 1 ; if (( a >= 0 ) and ( b >= 0 ) and ( str [ 3 ] = '-' )) pak mac . s1 := a * 16 + b jinak exit ; a := pos ( str [ 4 ] , ToHex ) - 1 ; b := pos ( str [ 5 ] , ToHex ) - 1 ; if (( a >= 0 ) and ( b >= 0 ) and ( str [ 6 ] = '-' )) pak mac . s2 := a * 16 + b jinak exit ; a := pos ( str [ 7 ] , ToHex ) - 1 ; b := pos ( str [ 8 ] , ToHex ) - 1 ; if (( a >= 0 ) and ( b >= 0 ) and ( str [ 9 ] = '-' )) pak mac . s3 := a * 16 + b jinak exit ; a := pos ( str [ 10 ] , ToHex ) - 1 ; b := pos ( str [ 11 ] , ToHex ) - 1 ; if (( a >= 0 ) and ( b >= 0 ) and ( str [ 12 ] = '-' )) pak mac . s4 := a * 16 + b jinak exit ; a := pos ( str [ 13 ] , ToHex ) - 1 ; b := pos ( str [ 14 ] , ToHex ) - 1 ; if (( a >= 0 ) and ( b >= 0 ) and ( str [ 15 ] = '-' )) pak mac . s5 := a * 16 + b jinak exit ; a := pos ( str [ 16 ] , ToHex ) - 1 ; b := pos ( str [ 17 ] , ToHex ) - 1 ; if (( a >= 0 ) a ( b >= 0 )) pak mac . s6 := a * 16 + b jinak exit ; Vysledek := true ; konec ; function TryWakeUpComputer ( const MacAddress : string ) : boolean ; var i : celé číslo ; mac : TMACAadresa ; pkt : TWakeupMagicPacket ; begin Vysledek := false ; pokud ne TryStrToMac ( MacAddress , mac ) , pak ukončete ; FillChar ( pkt . FillFF [ 0 ] , SizeOf ( pkt . FillFF ) , $FF ) ; for i := 0 High ( pkt . Mac ) do pkt . Mac [ i ] := mac ; s TIDUDPClient . Create ( nula ) zkuste BroadcastEnabled : = True ; Host := '255.255.255.255' ; Port := 9 ; SendBuffer ( pkt , sizeof ( pkt )) ; Vysledek := true ; konečně zdarma ; konec ; konec ; postup TForm1 . Button1Click ( Sender : TObject ) ; begin if ne TryWakeUpComputer ( Edit1 . Text ) then \\Mac View BC - AE - C5 - 8E-0 A - 2 C begin // Udělej něco... showmessage ( 'ERROR' ) ; konec ; konec ;

Poznámky

  1. Některé počítače je třeba po instalaci síťové karty alespoň jednou zapnout ručně. Když je toto zapnuto, počítač detekuje síťovou kartu a následně si zapamatuje, které zařízení má být napájeno. Dalším možným řešením by bylo nastavit v BIOSu nastavení Wake After Power Fail na On .