From bb7c6a21054be6747f802beec9e1d67df4e4f2f1 Mon Sep 17 00:00:00 2001 From: kim Date: Tue, 4 Aug 2026 10:37:43 +0900 Subject: [PATCH] =?UTF-8?q?wol-gate:=20=EB=A7=A4=EC=A7=81=ED=8C=A8?= =?UTF-8?q?=ED=82=B7=20=EB=B0=9C=EC=86=A1=20=EC=8B=9C=20=ED=8A=B8=EB=A6=AC?= =?UTF-8?q?=EA=B1=B0=ED=95=9C=20=EC=9A=94=EC=B2=AD=20=EC=B6=9C=EC=B2=98=20?= =?UTF-8?q?=EB=A1=9C=EA=B9=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 깨우기 원인이 실사용자 접속인지 봇/스캐너 트래픽인지 구분할 수 있도록 IP, User-Agent, 요청 경로를 로그에 남김. Co-Authored-By: Claude Sonnet 5 --- wol-gate/server.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/wol-gate/server.js b/wol-gate/server.js index 9771f0c..ea83eb0 100644 --- a/wol-gate/server.js +++ b/wol-gate/server.js @@ -78,10 +78,21 @@ function renderWakingPage() { `; } -function maybeWake() { +function describeRequester(req) { + const ip = req.headers['x-forwarded-for'] || req.socket.remoteAddress; + const ua = req.headers['user-agent'] || '-'; + const host = req.headers['host'] || '-'; + return `${ip} "${req.method} ${host}${req.url}" UA="${ua}"`; +} + +function maybeWake(req) { const now = Date.now(); - if (now - lastWakeAt <= WAKE_COOLDOWN_MS) return; + if (now - lastWakeAt <= WAKE_COOLDOWN_MS) { + console.log(`[wol-gate] wake suppressed (cooldown) - triggered by ${describeRequester(req)}`); + return; + } lastWakeAt = now; + console.log(`[wol-gate] waking - triggered by ${describeRequester(req)}`); try { sendMagicPacket(TARGET_MAC, BROADCAST_ADDR, WOL_PORT); } catch (e) { @@ -109,7 +120,7 @@ const server = http.createServer(async (req, res) => { proxyRequest(req, res); return; } - maybeWake(); + maybeWake(req); res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.end(renderWakingPage()); }); @@ -117,7 +128,7 @@ const server = http.createServer(async (req, res) => { // Forward WebSocket upgrades too, once awake (homeclaw uses WS heavily). server.on('upgrade', async (req, socket, head) => { if (!(await checkTargetAlive())) { - maybeWake(); + maybeWake(req); socket.destroy(); return; }