본문 바로가기

C#

WOL(Wake On Lan) - C#

Remote Wake-up이라고도 하는 Wake on LAN은 특수한 데이터 패킷(*매직 패킷이라고 함)을 전송하여 네트워크 컴퓨터를 원격으로 켤 수 있는 기술입니다. 컴퓨터가 꺼진 경우에도 네트워크 어댑터가 계속해서 네트워크를 "수신 대기"하므로 특수한 패킷이 도착하면 네트워크 어댑터가 컴퓨터를 켤 수 있습니다.Wake on LAN은 주로 컴퓨터 유지 관리 작업을 원격으로 수행하기 위해 시스템 관리자가 사용합니다. 매직 패킷을 수신하는 컴퓨터에는 Wake on LAN과 함께 작동하는 마더보드, 네트워크 어댑터, 어댑터 드라이버 및 컴퓨터 BIOS(Basic Input/Output system)가 있어야 합니다.

 

http://windows.microsoft.com/ko-kr/windows7/what-are-wake-on-lan-capabilities

출처 : "Wake on LAN" 기능이란?


매직패킷 이란 16진수 FF FF FF FF FF FF 뒤에 맥주소를 일렬로 16번 중단 없이 이은 102Byte 짜리 패킷 입니다. 해당 패킷을 포트지정 후 날리면 컴퓨터가 켜지게 됩니다.

사진 출처 : http://www.codeproject.com/Articles/11469/Wake-On-LAN-WOL?


● 과정
꺼져 있는 PC(해당 IP가 없음) 한테 네트워크를 통해 직접 신호를 보낼 수 없음.
때문에 공유기(또는 라우터) 에게 꺼진 PC를 켜기 위한 매직 패킷을 보냄
매직패킷을 보내기 위해 브로드캐스팅 방식 사용, 이건 특정 IP로만 신호를 보내는 것이 아니라 같은 망에 있는 모든 랜선에 동일한 신호를 보내서 모든 PC가 볼 수 있게 함.
이과정에서 꺼져있던 PC로 매직패킷 이란 신호가 가게 되고 PC는 이에 반응하여 부팅함.

● 설정
장치관리자-> 네트워크 어댑터->(랜카드 종류별 드라이버)->속성 ->고급 -
-> 웨이크 온 랜 종료 -> 사용으로 변경
장치관리자-> 네트워크 어댑터->(랜카드 종류별 드라이버)->속성 ->전원관리 -
-> 모두 체크 해제
부팅시 바이오스 화면가서 PME 어쩌고.. -> 사용함.

설정 관련된 부분은 PC, OS마다 다르실 수 있습니다.

 


C# 코드
using System.Net;
using System.Net.Sockets;

namespace WakeOnLan
{
    class Program
    {
        static void Main(string[] args)
        {
             byte[] mac = new byte[] {0x00, 0x07, 0x00, 0x00, 0x00, 0x00}; //mac주소  쓰면됨.
            WakeUp(mac);
         }
        
        private static void WakeUp(byte[] mac)
        {
            UdpClient client = new UdpClient();
             client.Connect(IPAddress.Broadcast, 40000);
            
            byte[] packet = new byte[17 * 6];
            
            for (int i = 0; i < 6; i++)
            {
                packet[i] =  0xFF;
            }

            for (int i = 1; i <= 16; i++)
            {
                for (int j = 0; j < 6; j++)
                {
                    packet[i * 6 + j] = mac[j];
                }
            }             
            client.Send(packet, packet.Length);           
        }
    }
}

 

 

[출처] WOL(Wake On Lan) - C#|작성자 으섭으섭

'C#' 카테고리의 다른 글

List Sort (정렬)  (0) 2021.04.23
람다 함수  (0) 2020.12.26
List Copy  (0) 2016.01.05
Delegate(델리게이트)  (0) 2015.12.21
클래스 참조  (0) 2015.12.19