Introduce random delays between res writes
This commit is contained in:
31
index.mjs
31
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}`
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user