wol-gate: 매직패킷 발송 시 트리거한 요청 출처 로깅
깨우기 원인이 실사용자 접속인지 봇/스캐너 트래픽인지 구분할 수 있도록 IP, User-Agent, 요청 경로를 로그에 남김. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+15
-4
@@ -78,10 +78,21 @@ function renderWakingPage() {
|
||||
</body></html>`;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user