Wake-on-LAN

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 14. oktober 2014; checks kræver 15 redigeringer .

Wake-on-LAN ( WOL ; oversat fra engelsk.  - "Vågn op på [et signal fra] et lokalt netværk ") - en teknologi, der giver dig mulighed for at fjerntænde en computer ved at sende en speciel sekvens af bytes over et lokalt netværk - en datapakke (den såkaldte magiske pakke  - "magisk pakke", se nedenfor ). Denne pakke kan indsættes i pakker med et hvilket som helst højere niveau standardprotokoller , såsom UDP eller IPX .

Wake-on-LAN computerkrav

Du skal også kunne sende en magisk pakke til den administrerede computer. Dette kan for eksempel gøres ved at bruge en anden computer med det relevante program (se eksempler nedenfor ).

Sådan virker det

Den styrede computer er i standby-tilstand ( eng.  standby - den tilstand, der er angivet i ATX -specifikationen , hvor kun standby + 5VSB for alle strømforsyningens udgangskredsløb er aktive) og leverer strøm til BIOS -chippen og netværksadapter [1] . Netværksadapteren er i lavstrømstilstand, mens dens mikrocontroller analyserer alle pakker, der kommer til den tilsvarende MAC-adresse uden at reagere på dem. Hvis en af ​​pakkerne viser sig at være magisk pakke , vil netværksadapteren afgive et signal om at tænde for computeren.

Magisk pakke

engelsk  Magic packet er en speciel sekvens af bytes, der kan indsættes i  transportlagspakker , der ikke kræver en forbindelse (f.eks. UDP-protokol eller ældre IPX ) til normal gennemkøring af lokale netværk. For Wake-on-LAN udsendes typisk protokolpakker i det øvre lag, fordi det i tilfælde af dynamisk adressetildeling ikke vides, hvilken IP-adresse der svarer til hvilken MAC-adresse. Men for at passere korrekt gennem en router, der forbyder broadcast-pakker, kan du sende pakken til en bestemt adresse.

I begyndelsen af ​​pakken er der en såkaldt synkroniseringskæde: 6 bytes svarende til 0xFF. Derefter - MAC-adressen på netværkskortet, gentaget 16 gange . Det vil sige, hvis adressen på tavlen så ud som 01:02:03:04:05:06 , så ville den magiske pakke være sådan her:

FFFFFFFFFFFF010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506

Eksempler

Programmer

Kilder

Opgaven med at skrive et program, der sender en magisk pakke, er ret enkel og gives ofte som en vejledning, når man lærer det grundlæggende i netværk. Nedenfor er to eksempler på sådanne programmer i kildekoder:

Kode i C# bruger System ; ved hjælp af System.Net.Sockets ; ved hjælp af System.Net ; ved hjælp af System.Collections.Generic ; navneområde Wol { class Program { static void Main ( string [] args ) { using ( UdpClient udpClient = new UdpClient ()) { Console . WriteLine ( "Indtast mac-adresse" ); byte [] mac = StrToMac ( Console.ReadLine ( ) ); udpClient . Send ( mac , mac . Længde , ny IPEndPoint ( IPAddress . Broadcast , 9 )); } } statisk byte [] StrToMac ( string s ) { List < byte > arr = new List < byte >( 102 ); streng [] macs = s . Split ( ' ' , ':' , '-' ); for ( int i = 0 ; i < 6 ; i ++) arr . Tilføj ( 0xff ) ; for ( int j = 0 ; j < 16 ; j ++) for ( int i = 0 ; i < 6 ; i ++) arr . Tilføj ( Convert.ToByte ( macs [ i ] , 16 ) ); retur arr . ToArray (); } } } Kode i Delphi

Tilpasset til Delphi7 version.

enhed WOL ; interface bruger Windows , Messages , SysUtils , Varianter , Classes , Graphics , Controls , Forms , Dialogs , IdBaseComponent , IdComponent , IdUDPBase , IdUDPClient , IdGlobal , StdCtrls ; type TForm1 = klasse ( TForm ) Edit1 : TEdit ; Knap1 : TBnap ; procedure Button1Click ( Afsender : TObject ) ; private { Private declarations } public { Offentlige declarations } end ; var Form1 : TForm1 ; implementering {$R *.dfm} type TMACAddress = pakket record case heltal 0 : ( s1 , s2 , s3 , s4 , s5 , s6 : byte ; ) ; 1 : ( cmp1 : ord ; cmp2 : heltal ; ) ; ende ; TWakeupMagicPacket = pakket record FillFF : array [ 0..5 ] af byte ; _ _ Mac : array [ 0..15 ] af TMACaddress ; _ _ ende ; funktion TryStrToMac ( str : streng ; var mac : TMACaddress ) : boolean ; var a , b : heltal ; const ToHex = '0123456789ABCDEF' ; start Resultat := falsk ; str := AnsiUpperCase ( trim ( str ) ) ; hvis længde ( str ) < 17 start mac . cmp1 := 0 ; mac . cmp2 := 0 ; udgang ; ende ; a : = pos ( str [ 1 ] , ToHex ) -1 ; b : = pos ( str [ 2 ] , ToHex ) -1 ; hvis (( a >= 0 ) og ( b >= 0 ) og ( str [ 3 ] = '-' )), mac . s1 := a * 16 + b ellers udgang ; a : = pos ( str [ 4 ] , ToHex ) -1 ; b : = pos ( str [ 5 ] , ToHex ) -1 ; hvis (( a >= 0 ) og ( b >= 0 ) og ( str [ 6 ] = '-' )), mac . s2 := a * 16 + b ellers udgang ; a : = pos ( str [ 7 ] , ToHex ) -1 ; b : = pos ( str [ 8 ] , ToHex ) -1 ; hvis (( a >= 0 ) og ( b >= 0 ) og ( str [ 9 ] = '-' )), mac . s3 := a * 16 + b ellers udgang ; a : = pos ( str [ 10 ] , ToHex ) -1 ; b : = pos ( str [ 11 ] , ToHex ) -1 ; hvis (( a >= 0 ) og ( b >= 0 ) og ( str [ 12 ] = '-' )), mac . s4 := a * 16 + b ellers udgang ; a : = pos ( str [ 13 ] , ToHex ) -1 ; b : = pos ( str [ 14 ] , ToHex ) -1 ; hvis (( a >= 0 ) og ( b >= 0 ) og ( str [ 15 ] = '-' )), mac . s5 := a * 16 + b ellers udgang ; a : = pos ( str [ 16 ] , ToHex ) -1 ; b : = pos ( str [ 17 ] , ToHex ) -1 ; hvis (( a >= 0 ) og ( b >= 0 )), mac . s6 := a * 16 + b ellers udgang ; Resultat := sandt ; ende ; funktion TryWakeUpComputer ( const MacAddress : string ) : boolean ; var i : heltal ; mac : TMACaddress ; pkt : TWakeupMagicPacket ; start Resultat := falsk ; hvis ikke TryStrToMac ( MacAddress , mac ) afslut ; FillChar ( pkt . FillFF [ 0 ] , SizeOf ( pkt . FillFF ) , $FF ) ; for i := 0 til Høj ( pkt . Mac ) gør pkt . Mac [ i ] := mac ; med TIdUDPClient . Opret ( nul ) prøv BroadcastEnabled : = True ; Vært := '255.255.255.255' ; Port := 9 ; SendBuffer ( pkt , størrelse af ( pkt )) ; Resultat := sandt ; endelig Fri ; ende ; ende ; procedure TForm1 . Button1Click ( Afsender : TObject ) ; start hvis ikke TryWakeUpComputer ( Rediger1 . Tekst ) \\Mac View BC - AE - C5-8E - 0 A - 2 C start // Gør noget... vis besked ( 'FEJL' ) ; ende ; ende ;

Noter

  1. Nogle computere skal tændes manuelt mindst én gang efter installation af et netværkskort. Når denne er tændt, vil computeren registrere netværkskortet og efterfølgende huske, hvilken enhed der skal have strøm. En anden mulig løsning ville være at indstille BIOS - indstillingen Wake After Power Fail til On .