Activación de la LAN

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 14 de octubre de 2014; las comprobaciones requieren 15 ediciones .

Wake-on-LAN ( WOL ; traducido del inglés.  - "Despertar en [una señal de] una red local ") - una tecnología que le permite encender una computadora de forma remota enviando una secuencia especial de bytes a través de una red local - un paquete de datos (el llamado paquete mágico  - "paquete mágico", ver más abajo ). Este paquete se puede insertar en paquetes de cualquier protocolo estándar de nivel superior , como UDP o IPX .

Requisitos informáticos de Wake-on-LAN

También debe poder enviar un paquete mágico a la computadora administrada. Esto se puede hacer, por ejemplo, usando otra computadora con el programa apropiado (vea los ejemplos a continuación ).

Cómo funciona

La computadora controlada está en modo de espera ( ing.  stand-by - el modo previsto por la especificación ATX , en el que solo está activo el standby + 5VSB de todos los circuitos de salida de la fuente de alimentación) y suministra energía al chip BIOS y adaptador de red [1] . El adaptador de red está en modo de bajo consumo, mientras que su microcontrolador analiza todos los paquetes que llegan a la dirección MAC correspondiente , sin responder a ellos. Si uno de los paquetes resulta ser un paquete mágico , el adaptador de red emitirá una señal para encender la computadora.

Paquete mágico

inglés  El paquete mágico es una secuencia especial de bytes que se puede insertar en los  paquetes de la capa de transporte que no requieren una conexión (por ejemplo, el protocolo UDP o IPX heredado) para el paso normal de las redes locales. Por lo general, para Wake-on-LAN, los paquetes de protocolo de capa superior se transmiten porque, en el caso de la asignación dinámica de direcciones, no se sabe qué dirección IP corresponde a qué dirección MAC. Sin embargo, para pasar correctamente a través de un enrutador que prohíbe la transmisión de paquetes, puede enviar el paquete a alguna dirección específica.

Al comienzo del paquete hay una llamada cadena de sincronización: 6 bytes igual a 0xFF. Luego, la dirección MAC de la tarjeta de red, repetida 16 veces . Es decir, si la dirección de la placa fuera 01:02:03:04:05:06 , entonces el paquete mágico sería así:

FFFFFFFFFFFF010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506010203040506 010203040506

Ejemplos

Programas

Fuentes

La tarea de escribir un programa que envíe un paquete mágico es bastante simple y, a menudo, se proporciona como un tutorial cuando se aprenden los conceptos básicos de la creación de redes. A continuación se muestran dos ejemplos de dichos programas en códigos fuente:

Código en C# utilizando el sistema ; utilizando System.Net.Sockets ; utilizando System.Net ; usando System.Collections.Generic ; espacio de nombres Wol { class Program { static void Main ( string [] args ) { using ( UdpClient udpClient = new UdpClient ()) { Console . WriteLine ( "Ingrese la dirección mac" ); byte [] mac = StrToMac ( Console.ReadLine ( ) ); clienteupp . Enviar ( mac , mac . Longitud , nuevo IPEndPoint ( IPAddress . Broadcast , 9 )); } } byte estático [] StrToMac ( string s ) { List < byte > arr = new List < byte >( 102 ); cadena [] macs = s . Dividir ( ' ' , ':' , '-' ); para ( int i = 0 ; i < 6 ; i ++) arr . Añadir ( 0xff ) ; para ( int j = 0 ; j < 16 ; j ++) para ( int i = 0 ; i < 6 ; i ++) arr . Añadir ( Convert.ToByte ( macs [ i ] , 16 ) ); volver arr . a la matriz (); } } } Código en Delphi

Adaptado para la versión Delphi7.

unidad WOL ; interfaz utiliza Windows , Mensajes , SysUtils , Variantes , Clases , Gráficos , Controles , Formularios , Diálogos , IdBaseComponent , IdComponent , IdUDPBase , IdUDPClient , IdGlobal , StdCtrls ; tipo TForm1 = clase ( TForm ) Edit1 : TEdit ; Botón1 : BotónT ; procedimiento Button1Click ( Remitente : TObject ) ; private { Declaraciones privadas } public { Declaraciones públicas } end ; var Formulario1 : TForm1 ; implementación {$R *.dfm} escriba TMACAddress = entero de caso de registro empaquetado de 0 : ( s1 , s2 , s3 , s4 , s5 , s6 : byte ; ) ; 1 : ( cmp1 : palabra ; cmp2 : entero ; ) ; fin ; TWakeupMagicPacket = registro empaquetado FillFF : matriz [ 0 .. 5 ] de byte ; Mac : matriz [ 0 .. 15 ] de TMACAddress ; fin ; function TryStrToMac ( str : string ; var mac : TMACAddress ) : boolean ; var a , b : entero ; const ToHex = '0123456789ABCDEF' ; comenzar Resultado : = falso ; str := AnsiUpperCase ( recortar ( str )) ; si la longitud ( str ) < 17 entonces comienza mac . cmp1 := 0 ; mac _ cmp2 := 0 ; salida ; fin ; a := pos ( str [ 1 ] , ToHex ) - 1 ; b := pos ( str [ 2 ] , ToHex ) - 1 ; si (( a >= 0 ) y ( b >= 0 ) y ( str [ 3 ] = '-' )) entonces mac . s1 := a * 16 + b si no salir ; a := pos ( str [ 4 ] , ToHex ) - 1 ; b := pos ( str [ 5 ] , ToHex ) - 1 ; si (( a >= 0 ) y ( b >= 0 ) y ( str [ 6 ] = '-' )) entonces mac . s2 := a * 16 + b sino salir ; a := pos ( str [ 7 ] , ToHex ) - 1 ; b := pos ( str [ 8 ] , ToHex ) - 1 ; si (( a >= 0 ) y ( b >= 0 ) y ( str [ 9 ] = '-' )) entonces mac . s3 := a * 16 + b si no salir ; a := pos ( str [ 10 ] , ToHex ) - 1 ; b := pos ( str [ 11 ] , ToHex ) - 1 ; si (( a >= 0 ) y ( b >= 0 ) y ( str [ 12 ] = '-' )) entonces mac . s4 := a * 16 + b si no salir ; a := pos ( str [ 13 ] , ToHex ) - 1 ; b := pos ( str [ 14 ] , ToHex ) - 1 ; si (( a >= 0 ) y ( b >= 0 ) y ( str [ 15 ] = '-' )) entonces mac . s5 := a * 16 + b sino salir ; a := pos ( str [ 16 ] , ToHex ) - 1 ; b := pos ( str [ 17 ] , ToHex ) - 1 ; si (( a >= 0 ) y ( b >= 0 )) entonces mac . s6 := a * 16 + b si no salir ; Resultado := verdadero ; fin ; function TryWakeUpComputer ( const MacAddress : string ) : booleano ; var i : entero ; mac : DirecciónTMAC ; paquete : TWakeupMagicPacket ; comenzar Resultado : = falso ; si no es TryStrToMac ( MacAddress , mac ) , salga ; FillChar ( paquete . FillFF [ 0 ] , SizeOf ( paquete . FillFF ) , $FF ) ; para i := 0 a Alto ( pkt . Mac ) haga pkt . mac [ i ] := mac ; con TIdUDPClient . Crear ( nil ) intente BroadcastEnabled : = True ; Anfitrión : = '255.255.255.255' ; Puerto := 9 ; SendBuffer ( paquete , tamaño de ( paquete )) ; Resultado := verdadero ; finalmente Libre ; fin ; fin ; procedimiento TForm1 . Button1Click ( Remitente : TObject ) ; comenzar si no TryWakeUpComputer ( Edit1 . Text ) entonces \\Mac View BC - AE - C5 - 8E-0 A - 2 C comenzar // Hacer algo... mostrar mensaje ( 'ERROR' ) ; fin ; fin ;

Notas

  1. Algunas computadoras deben encenderse manualmente al menos una vez después de instalar una tarjeta de red. Cuando está encendido, la computadora detectará la tarjeta de red y posteriormente recordará qué dispositivo debe encenderse. Otra posible solución sería establecer la configuración del BIOS Wake After Power Fail en On .