Node.js 에서 WOL 프로토콜을 사용해 컴퓨터를 원격 부팅하는 방법입니다. WOL 은 Wake On LAN 의 약자로 랜선이 연결된 랜 카드를 통해 컴퓨터를 켜는 방법입니다. 컴퓨터에 WOL 이 활성화 (경우에 따라 마더보드 설정을 변경해야 할 수 있습니다) 되어 있고 MAC 주소를 알고 있으면 매직 패킷을 전송해 컴퓨터를 원격으로 켤 수 있습니다. (연결 된 네트워크가 공유기 환경이라면 같은 공유기 네트워크에 있는 기기가 필요합니다)
간단한 방법
Pingus 모듈 설치
npm i pingus
다음의 자바스크립트 코드를 실행하면 00-00-00-00-00-00 MAC 주소의 컴퓨터로 매직 패킷이 전송됩니다.
import pingus from 'pingus';
pingus
.wol('00-00-00-00-00-00')
.then((result) => {
console.log(result);
})
.catch((error) => {
throw error;
});
조금 복잡한 방법
WOL 을 사용하려면 매직 패킷을 보내야 합니다. 매직 패킷은 처음 6번의 0xff 와 16번 반복되는 대상 컴퓨터의 MAC 주소로 구성되어 있습니다. 매직 패킷을 UDP 9번 (혹은 7번) 포트로 브로드캐스트하면 라우터 내의 모든 컴퓨터로 패킷이 전송됩니다. 자신의 MAC 주소가 포함된 매직 패킷을 수신받은 랜 카드는 이를 인식하고 대상 컴퓨터를 켭니다.
먼저 매직 패킷 버퍼를 만듭니다.
const header = Buffer.from([0xff, 0xff, 0xff, 0xff, 0xff, 0xff]); // 처음의 0xff 6개
let address = '00-00-00-00-00-00';
address = address.replace(/[^a-f0-9]/g, ''); // MAC 주소 이외의 요소 제거
let mac = Buffer.alloc(6);
for (let i = 0; i < 6; i++) {
mac[i] = parseInt(address.substring(i * 2, i * 2 + 2), 16); // MAC 주소를 2자씩 끊어서 6 바이트에 할당
}
let magic = header; // 먼저 0xff 6개로 시작
for (let i = 0; i < 16; i++) {
magic = Buffer.concat([magic, mac]); // 이후 MAC 주소 16회 반복
만들어진 매직 패킷을 UDP 소켓 (Node.js dgram 사용)으로 브로드캐스트합니다.
import dgram from 'dgram'; // Node.js UDP 소켓
const socket = new dgram.createSocket('udp4');
socket.on('listening', () => {
socket.setBroadcast(true);
});
// 9번 포트, 브로드캐스트 IP 사용
socket.send(magic, 0, magic.length, 9, '255.255.255.255', (err, bytes) => {
if (err) {
throw err;
}
console.log('매직 패킷 전송됨', bytes + 'bytes');
});
매직 패킷을 보낼 때 대상 컴퓨터는 꺼진 상태이므로 대상의 IP 가 존재하지 않습니다. 그러므로 대상 컴퓨터 고유의 MAC 주소를 담은 매직 패킷을 라우터 내 모든 기기에 브로드캐스트해 랜 카드가 이를 인식하고 컴퓨터를 킬 수 있도록 합니다.