Programa para encender remotamente una PC a través de Internet utilizando el protocolo Wake-on-LAN.

Wake-on-LAN (WoL) es un estándar de red de computadoras Ethernet o Token Ring que permite que una computadora se encienda o se despierte mediante un mensaje de red. 

  • El mensaje generalmente se envía a la computadora de destino mediante un programa ejecutado en un dispositivo conectado a la misma red de área local, como un teléfono inteligente.
  • También es posible iniciar el mensaje desde otra red mediante transmisiones dirigidas a subredes o un servicio de puerta de enlace WOL.
  • Los términos equivalentes incluyen despertar en WAN, despertar remoto, encendido por LAN, encendido por LAN, reanudar por LAN, reanudar en LAN y despertar en LAN.

Principio de funcionamiento 

  • Wake-on-LAN («WOL») se implementa utilizando un paquete especialmente diseñado llamado paquete mágico, que se envía a todas las computadoras en una red, entre ellas la computadora que se va a despertar.
  • El paquete mágico contiene la dirección MAC de la computadora de destino, un número de identificación integrado en cada tarjeta de interfaz de red («NIC») u otros dispositivos Ethernet en una computadora, que permite que se reconozca y se dirija de manera única en una red.
  • Las computadoras apagadas o apagadas con capacidad Wake-on-LAN contendrán dispositivos de red capaces de «escuchar» los paquetes entrantes en modo de bajo consumo mientras el sistema está apagado.
  • Si se recibe un paquete mágico que se dirige a la dirección MAC del dispositivo, la NIC envía una señal a la fuente de alimentación de la computadora o a la placa base para iniciar la reactivación del sistema, de la misma manera que lo haría presionando el botón de encendido.
  • El paquete mágico se envía en la capa de enlace de datos (capa 2 en el modelo OSI) y, cuando se envía, se transmite a todos los dispositivos conectados en una red determinada, utilizando la dirección de transmisión de la red; la dirección IP (capa 3 en el modelo OSI) no se utiliza.

Para que Wake-on-LAN funcione, partes de la interfaz de red deben permanecer activadas. Esto consume una pequeña cantidad de energía de reserva, mucho menos que la energía de funcionamiento normal. Por lo tanto, deshabilitar Wake-on-LAN cuando no es necesario puede reducir ligeramente el consumo de energía en computadoras que están apagadas pero aún enchufadas a una toma de corriente.

Estructura 
del paquete mágico El paquete mágico es una trama de transmisión que contiene en cualquier lugar dentro de su carga útil 6 bytes de los 255 (FF FF FF FF FF FF en hexadecimal), seguido de dieciséis repeticiones de la dirección MAC de 48 bits de la computadora de destino, para un total de 102 bytes 
Dado que el paquete mágico solo se escanea en busca de la string anterior, y en realidad no lo analiza una pila de protocolos completa, se puede enviar como cualquier protocolo de capa de red y de transporte, aunque normalmente se envía como un datagrama UDP al puerto 0, 7 , o 9, o directamente a través de Ethernet como EtherType 0x0842.

Un paquete mágico estándar tiene las siguientes limitaciones básicas:  

  1. Requiere la dirección MAC de la computadora de destino (también puede requerir una contraseña de SecureOn).
  2. No proporcione una confirmación de entrega.
  3. Puede que no funcione fuera de la red local.
  4. Requiere soporte de hardware de Wake-On-LAN en la computadora de destino.
  5. La mayoría de las interfaces inalámbricas 802.11 no mantienen un enlace en estados de bajo consumo y no pueden recibir un paquete mágico.

La implementación de Wake-on-LAN está diseñada para ser muy simple y ser procesada rápidamente por el circuito presente en la tarjeta de interfaz de red con un requisito mínimo de energía. Debido a que Wake-on-LAN opera por debajo de la capa de protocolo IP, se requiere la dirección MAC y hace que las direcciones IP y los nombres DNS no tengan sentido.

C++

// C program to remotely Power On a PC over the
// internet using the Wake-on-LAN protocol.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <sys/types.h>
 
int main()
{
    int i;
    unsigned char toSend[102],mac[6];
    struct sockaddr_in udpClient, udpServer;
    int broadcast = 1 ;
 
    // UDP Socket creation
    int udpSocket = socket(AF_INET, SOCK_DGRAM, 0);
 
    // Manipulating the Socket
    if (setsockopt(udpSocket, SOL_SOCKET, SO_BROADCAST,
                  &broadcast, sizeof broadcast) == -1)
    {
        perror("setsockopt (SO_BROADCAST)");
        exit(EXIT_FAILURE);
    }
    udpClient.sin_family = AF_INET;
    udpClient.sin_addr.s_addr = INADDR_ANY;
    udpClient.sin_port = 0;
 
    //Binding the socket
    bind(udpSocket, (struct sockaddr*)&udpClient, sizeof(udpClient));
 
    for (i=0; i<6; i++)
        toSend[i] = 0xFF;
 
    // Let the MAC Address be ab:cd:ef:gh:ij:kl
    mac[0] = 0xab;  // 1st octet of the MAC Address
    mac[1] = 0xcd;  // 2nd octet of the MAC Address
    mac[2] = 0xef;  // 3rd octet of the MAC Address
    mac[3] = 0xgh;  // 4th octet of the MAC Address
    mac[4] = 0xij;  // 5th octet of the MAC Address
    mac[5] = 0xkl;  // 6th octet of the MAC Address
 
    for (i=1; i<=16; i++)
        memcpy(&toSend[i*6], &mac, 6*sizeof(unsigned char));
 
    udpServer.sin_family = AF_INET;
 
    // Broadcast address
    udpServer.sin_addr.s_addr = inet_addr("10.89.255.255");
    udpServer.sin_port = htons(9);
 
    sendto(udpSocket, &toSend, sizeof(unsigned char) * 102, 0,
             (struct sockaddr*)&udpServer, sizeof(udpServer));
    return 0;
}

Producción: 

This program will power on the switched-off PC
whose MAC Address is used in this program (the 
PC and the Host computer must be connected over
LAN). 

Este artículo es una contribución de Kishlay Verma . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Referencia:  
https://en.wikipedia.org/wiki/Wake-on-LAN
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *