ウェイクオン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 を無効にすると、電源がオフになっていても電源ソケットに接続されているコンピューターの消費電力がわずかに削減される可能性があります。
Javaスイッチ
マジックパケットの構造
マジック パケットは、ペイロード内の任意の場所に、全 255 バイト (16 進数で FF FF FF FF FF FF) のうちの 6 バイトと、それに続くターゲット コンピュータの 48 ビット MAC アドレスの 16 回の繰り返し (合計 102 バイト) を含むブロードキャスト フレームです。
マジック パケットは上記の文字列をスキャンするだけで、実際には完全なプロトコル スタックによって解析されないため、ネットワーク層およびトランスポート層のプロトコルとして送信される可能性がありますが、通常は UDP データグラムとしてポート 0、7 または 9 に送信されるか、EtherType 0x0842 としてイーサネット経由で直接送信されます。
標準のマジック パケットには、次の基本的な制限があります。
- 宛先コンピュータの MAC アドレスが必要です (SecureOn パスワードも必要な場合があります)。
- 配達確認を提供しないでください。
- ローカル ネットワークの外では動作しない可能性があります。
- 宛先コンピューター上で Wake-On-LAN のハードウェア サポートが必要です。
- ほとんどの 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] = 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; }
出力:
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