티스토리 뷰

c#

[wpf/c#/unity] Wake On Lan 사용하기(원격부팅)

개발자 고포고 2022. 2. 16. 14:07
반응형

[wpf/c#/unity] Wake On Lan 사용하기(원격부팅)

 

WakeOnLan

#매직패킷을 활용하여 Lan으로 PC를 부팅하는 방법

[조건]

#랜카드 저전력 모드 Off, 매직패킷,WakeOnLan 기능 활성화

#바이오스 PCI-E 기능 켜기

#유선랜으로 연결

 

 

#구현 코드

  public class WakeOnLan : UdpClient
    {
        public WakeOnLan()
            : base()
        {
        }

        /// <summary>
        /// 컴퓨터 부팅 하기
        /// </summary>
        /// <param name="macAddress">부팅 할 컴퓨터의 맥어드레스</param>
        public void TurnOnPC(string macAddress)
        {
            this.Connect(new System.Net.IPAddress(0xffffffff), 0x2fff); //255.255.255.255 : 12287

            MagicPacket(macAddress);
        }

        public void TurnOnPC(string ip, string macAddress)
        {
            this.Connect(ip, 12287); //255.255.255.255 : 12287

            MagicPacket(macAddress);
        }

        private void MagicPacket(string macAddress)
        {
            if (this.Active)
            {
                this.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 0);
            }

            byte[] bytes = GetMagicPacketToByteArray(macAddress);

            // 컴퓨터를 부팅 할 매직패킷을 보낸다.
            int reterned_value = this.Send(bytes, 1024);
        }

        private byte[] GetMagicPacketToByteArray(string macAddress)
        {
            // 보낼 바이트 초기화
            int counter = 0;

            // 보낼 버퍼 초기화
            byte[] bytes = new byte[1024];

            // 처음 6개 바이트는 "0xFF"  
            for (int y = 0; y < 6; y++)
                bytes[counter++] = 0xFF;

            // 부팅 할 컴퓨터의 맥어드레스를 16번 반복한다.
            for (int y = 0; y < 16; y++)
            {
                int i = 0;
                for (int z = 0; z < 6; z++)
                {
                    bytes[counter++] =
                        byte.Parse(macAddress.Substring(i, 2),
                        System.Globalization.NumberStyles.HexNumber);
                    i += 2;
                }
            }

            return bytes;
        }
    }

 

#활용 코드

 public void OnPC()
        {
            WakeOnLan wol = new WakeOnLan();
            wol.TurnOnPC("3C18A0D4C26B");
        }

 

#Unity #C# #Winform #WakeOnLan #MagicPacket #원격부팅

반응형
댓글
반응형