Wake-on-LAN 프로토콜을 사용하여 인터넷을 통해 원격으로 PC 전원을 켜는 프로그램입니다.
WoL(Wake-on-LAN) 컴퓨터가 네트워크 메시지에 의해 켜지거나 깨어날 수 있도록 하는 이더넷 또는 토큰 링 컴퓨터 네트워킹 표준입니다.
- 메시지는 일반적으로 스마트폰과 같이 동일한 근거리 통신망에 연결된 장치에서 실행되는 프로그램에 의해 대상 컴퓨터로 전송됩니다.
- 서브넷 지향 브로드캐스트나 WOL 게이트웨이 서비스를 사용하여 다른 네트워크에서 메시지를 시작하는 것도 가능합니다.
- 동등한 용어로는 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바이트를 포함하는 브로드캐스트 프레임입니다.
매직 패킷은 위의 문자열에 대해서만 스캔되고 전체 프로토콜 스택에 의해 실제로 구문 분석되지 않기 때문에 일반적으로 포트 0 7 또는 9에 UDP 데이터그램으로 전송되거나 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 ] = 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