Wake-on-LAN プロトコルを使用して、インターネット経由で PC の電源をリモートからオンにするプログラム。

ウェイクオンLAN (WoL) は、ネットワーク メッセージによってコンピュータの電源を入れたり起動したりできるようにするイーサネットまたはトークン リング コンピュータ ネットワーク標準です。 

  • メッセージは通常、同じローカル エリア ネットワークに接続されているスマートフォンなどのデバイス上で実行されるプログラムによってターゲット コンピュータに送信されます。
  • サブネット向けブロードキャストまたは WOL ゲートウェイ サービスを使用して、別のネットワークからメッセージを開始することもできます。
  • 同等の用語には、Wake on WAN リモート ウェイクアップ LAN による電源投入 LAN による電源投入 LAN による再開 LAN 上の再開および LAN でのウェイクアップが含まれます。

動作原理  

  • Wake-on-LAN (「WOL」) は、マジック パケットと呼ばれる特別に設計されたパケットを使用して実装されます。このパケットは、ウェイクアップするコンピュータを含むネットワーク内のすべてのコンピュータに送信されます。
  • マジック パケットには、宛先コンピュータの MAC アドレスと、ネットワーク上でコンピュータを一意に認識してアドレス指定できるようにする、コンピュータ内の各ネットワーク インターフェイス カード (「NIC」) またはその他のイーサネット デバイスに組み込まれた識別番号が含まれています。
  • Wake-on-LAN が可能な電源がオフまたはオフになっているコンピュータには、システムの電源がオフになっている間、低電力モードで受信パケットを「リッスン」できるネットワーク デバイスが含まれています。
  • デバイスの MAC アドレス宛てのマジック パケットを受信した場合、NIC は、電源ボタンを押すのと同じ方法で、コンピュータの電源またはマザーボードにシステムのウェイクアップを開始するよう信号を送ります。
  • マジック パケットはデータ リンク層 (OSI モデルの層 2) で送信され、送信されると、ネットワーク ブロードキャスト アドレスを使用して、指定されたネットワーク上の接続されているすべてのデバイスにブロードキャストされます。 IP アドレス (OSI モデルのレイヤー 3) は使用されません。

Wake-on-LAN が機能するには、ネットワーク インターフェイスの一部がオンのままである必要があります。これにより、通常の動作電力よりもはるかに少ない少量のスタンバイ電力が消費されます。したがって、必要のないときに Wake-on-LAN を無効にすると、電源がオフになっていても電源ソケットに接続されているコンピューターの消費電力がわずかに削減される可能性があります。

マジックパケットの構造  
マジック パケットは、ペイロード内の任意の場所に、全 255 バイト (16 進数で FF FF FF FF FF FF) のうちの 6 バイトと、それに続くターゲット コンピュータの 48 ビット MAC アドレスの 16 回の繰り返し (合計 102 バイト) を含むブロードキャスト フレームです。 
マジック パケットは上記の文字列をスキャンするだけで、実際には完全なプロトコル スタックによって解析されないため、ネットワーク層およびトランスポート層のプロトコルとして送信される可能性がありますが、通常は UDP データグラムとしてポート 0、7 または 9 に送信されるか、EtherType 0x0842 としてイーサネット経由で直接送信されます。

標準のマジック パケットには、次の基本的な制限があります。   

  1. 宛先コンピュータの MAC アドレスが必要です (SecureOn パスワードも必要な場合があります)。
  2. 配達確認を提供しないでください。
  3. ローカル ネットワークの外では動作しない可能性があります。
  4. 宛先コンピューター上で Wake-On-LAN のハードウェア サポートが必要です。
  5. ほとんどの 802.11 ワイヤレス インターフェイスは、低電力状態ではリンクを維持せず、マジック パケットを受信できません。

Wake-on-LAN の実装は非常にシンプルで、最小限の電力要件でネットワーク インターフェイス カード上の回路によって迅速に処理されるように設計されています。 Wake on LAN は IP プロトコル層の下で動作するため、MAC アドレスが必要となり、IP アドレスと DNS 名は無意味になります。

C
   // C program to remotely Power On a PC over the   // internet using the Wake-on-LAN protocol.   #include         #include         #include         #include         #include         #include          #include         #include         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  ]     =     0  xgh  ;     // 4th octet of the MAC Address      mac  [  4  ]     =     0  xij  ;     // 5th octet of the MAC Address      mac  [  5  ]     =     0  xkl  ;     // 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  ;   }   

出力: 

 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).

参照 :  
https://en.wikipedia.org/wiki/Wake-on-LAN
 

クイズの作成