diff --git a/index.mjs b/index.mjs index e31a7d7..369cbf6 100644 --- a/index.mjs +++ b/index.mjs @@ -1,38 +1,45 @@ import { createServer } from 'node:http'; -import { clearInterval, setInterval } from 'node:timers'; +import { setTimeout } from 'node:timers'; const msg = ':) you are an idiot hahahahaha :)'; +const minDelay = 1000; +const maxDelay = 5000; +const delayDiff = maxDelay - minDelay; +const randomDelay = () => Math.floor(Math.random() * delayDiff + minDelay); const server = createServer((req, res) => { const connOpenDate = new Date(); - const dateLogText = connOpenDate.toLocaleString('pl'); + const dateText = connOpenDate.toLocaleString('pl'); const attacker = req.headers['x-forwarded-for']; const host = req.headers['x-forwarded-host']; - - console.log( - `[${dateLogText}] ${attacker} targeted ${host} on ${req.method} ${req.url}` - ); - + const endpoint = `${req.method} ${req.url}`; let charIdx = 0; - const intervalId = setInterval(() => { + console.log(`[${dateText}] ${attacker} targeted ${host} on ${endpoint}`); + + const hang = () => { + if (res.closed) return; + if (charIdx === msg.length) { charIdx = 0; res.write('\n'); } else { res.write(msg[charIdx++]); } - }, 3000); + + setTimeout(hang, randomDelay()); + }; + + hang(); res.once('close', () => { const connCloseDate = new Date(); const timeDiff = connCloseDate.getTime() - connOpenDate.getTime(); - const dateLogText = connCloseDate.toLocaleString('pl'); + const dateText = connCloseDate.toLocaleString('pl'); const diffText = new Date(timeDiff).toISOString().substring(11, 19); - clearInterval(intervalId); console.log( - `[${dateLogText}] ${attacker} aborted connection after ${diffText}` + `[${dateText}] ${attacker} aborted connection after ${diffText}` ); }); });