http://seunghan.tistory.com/329
http://dorigom.springnote.com/pages/1519772

1. 조건
  - 랜카드에서 Wake-on-LAN 기능 지원
  - Wake-on-LAN 기능을 지원하는 인터넷공유기

2. 바이오스 설정
  - Award BIOS
     .PCI configuration > Onboard LAN Boot ROM : Enable
     .Power > Power Up Control > Power Up On PCI Card :Enable
  - Phoenix BIOS
     .Wake On Lan : Enable

3. 랜카드 설정
  - Realtek 칩셋
     .전원을 절약하기 위해 컴퓨터가 이 장치를 끌 수 있음 : 사용
     .이 장치로 컴퓨터를 대기상태에서 빠져나오게함 : 사용
     .관리 스테이션에서만 대기 모드 상태의 컴퓨터를 해제 시킬 수 있음 : 사용
  - Intel 칩셋
     .전원을 절약하기 위해 컴퓨터가 이 장치를 끌 수 있음 : 사용
     .이 장치로 컴퓨터를 대기상태에서 빠져나오게함 : 사용



4. 시스템 켜기
  - 매직패킷 보내는 유틸 , 사이트
     .WakeOnLanGui 또는 www.depicus.com/wake-on-lan/woli.aspx
       주소 , IP , 서브넷 , 포트 입력후 전송
  - WAKE ON LAN 매직 패킷 프로그램 (첨부파일 다운로드)
    

     .LAN 상에서의 내부 IP 사용한 부팅
       맥 어드레스, LAN IP(내부 IP), 서브넷 255.255.255.0, Local Subnet 선택, 원격포트번호X
     .WAN 상에서의 IP 사용한 부팅
       맥 어드레스, WAN IP(외부 IP), 서브넷 255.255.255.255, internet 선택


WOL(Wake on Lan)편집하기 http://kldp.org/Translations/html/WakeOnLan-KLDP/index.html

What?
특별히 설계된 네트웍 패킷을 사용하여 원격의 컴퓨터를 기동하는 것이다. 이 기능은 네트웍 카드와 마더보드가 Wake on Lan을 지원해야만 제대로 동작한다.

How?
WOL 은 다음과 같은 원리로 동작한다:

PC 를 종료할 때 NIC (네트웍 카드) 은 완전히 꺼진 것은 아닌 상태로 여전히 켜져 있으며, '매직' 패킷이 오는지 살펴보고 있다. 이 패킷은 특정한 문자열 (byte-sequence) 이 포함되어 있어야 하며, 아무 프로토콜 (이를테면 IPX, IP 따위) 에나 얹혀오면 된다. '마법의' 문자열을 만드는 코드를 참조하기 바란다.

이 프로그램은 UDP 를 사용해서 패킷을 보낸다. 이더넷 인터페이스로 전달되는 UDP 패킷의 완전한 모습은 아래와 같은 것이다:

          [ethernet header][IP header][UDP header][Magic sequence][CRCS]
          

스크립트는 단지 이 패킷을 보내는 것으로 족하다. NIC 은 수신만 할 뿐이며 무언가 응답하는 것이 없으므로, 이 패킷을 보낸 후 돌아오는 데이터 등에 대해서는 신경쓰지 않아도 좋다.

프로토콜에 대한 좀 더 상세한 설명은 AMD 백서를 참고하라.



http://www.chocomug.com/tt/chocomug/292

http://www.remotewakeup.com/

http://en.wikipedia.org/wiki/Wake-on-LAN



예제소스
Wake-On-Lan
It’s so sweety to maintain all workstations automatically in, say, 3am at night :) But this requires to turn it all on, and switch off after maintenance. Shutdowning is not a problem, but turning on… Turning on is not a problem too, but <=> your workstations support Wake-On-Lan technology.

Here a small C example how to invoke Wake-On-Lan.

Algo is simple - broadcast UDP magic-packet.

Magic packet consists of:

Six 0xFF bytes
Target MAC address repeated sixteen times.
If, say, target MAC is 32:00:00:23:11:13. Magic packet is

          FF FF FF FF FF FF 32 00 00 23 11 13 32 00 00 23 11 13 32 00 00 23 11 13
          32 00 00 23 11 13 32 00 00 23 11 13 32 00 00 23 11 13 32 00 00 23 11 13
          32 00 00 23 11 13 32 00 00 23 11 13 32 00 00 23 11 13 32 00 00 23 11 13
          32 00 00 23 11 13 32 00 00 23 11 13 32 00 00 23 11 13 32 00 00 23 11 13
          32 00 00 23 11 13
          Ok, ive stop bugging you and here is the code:

          /**
           * wol.c - Wake-On-Lan example.
           *
           * 2008, Michelle Beloshitsky (itanko@li.ru)
           *
           **/
          
          #include "winsock2.h"
          #include "stdio.h"
          
          #define MYPORT 2050
          
          #define MAGIC_PACKET_SIZE 6*17
          
          /**
           * Creates magic packet
           **/
          char* do_magic(char* mac)
          {
              int i; int j;
          
              char * res = malloc(MAGIC_PACKET_SIZE);
              memset(res, 0xFF, MAGIC_PACKET_SIZE);
          
              for(i=1;i<17;i++)
              {
                  for(j=0;j<6;j++)
                  {
                     res[i*6+j] = mac[j]; // expected to be at least 6 chars
                  }
              }
              return res;
          }
          
          int main()
          {
              unsigned char test_mac[6] = {0x00, 0x29, 0xED, 0x46, 0xE2, 0x06};
          
              WSADATA wsadata;
              if ( WSAStartup(MAKEWORD(2,2), &wsadata) != 0 )
              {
              printf("WSAStartup() error %i\n", WSAGetLastError());
                  return 1;
              }
          
              SOCKET sock;
              sock = socket(AF_INET,SOCK_DGRAM,0);
              if (sock == INVALID_SOCKET)
              {
                  printf("socket() error %i\n", WSAGetLastError());
                  return 1;
              }
          
              char bc = '1'; // broadcast
          
              if(setsockopt(sock,SOL_SOCKET,SO_BROADCAST,&bc,sizeof(bc)) < 0)
              {
                  printf("setsockopt() error %i\n", WSAGetLastError());
                  closesocket(sock);
                  return 1;
              }
          
              struct sockaddr_in Sender_addr;
          
              Sender_addr.sin_family       = AF_INET;
              Sender_addr.sin_port         = htons(MYPORT);
              Sender_addr.sin_addr.s_addr  = INADDR_BROADCAST;
          
              int res = sendto(sock,
                               do_magic(test_mac),
                               MAGIC_PACKET_SIZE,
                               0,
                               (struct sockaddr_in *)&Sender_addr,
                               sizeof(Sender_addr));
          
              if(res != MAGIC_PACKET_SIZE)
              {
                  printf("sendto() error %i\n", WSAGetLastError());
                  closesocket(sock);
                  return 1;
              }
          
              closesocket(sock);
              WSACleanup();
          }


출처 : 하창호닷컴
http://www.hachangho.com/homev30/bbs/zboard.php?id=tech&page=1&sn1=&divpage=1&category=4&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=501&PHPSESSID=177452459b75a95fd021a8224ce5a2f5