Repository navigation
Web Panel
Warning
The panel can start processes. Keep it on 127.0.0.1 unless you have added a reverse proxy, TLS, and real authentication.
The repository includes two panels:
-
Node panel — the default, started by
python3 start.py WEBorweb/scripts/start.*. -
Flask panel — an optional Python panel in
web/app.py.
Both expose the same basic flow: choose a method, enter an authorized target, set threads and duration, start the task, watch the log.
flowchart LR
U[Browser] --> P[Panel]
P --> V[Validate target]
V --> S[start.py]
S --> L[Stream logs]
- Install
- Start
- Configuration
- What the panel can do
- Node panel layout
- Flask panel
- Security notes
- Troubleshooting
# Linux / macOS
bash web/scripts/install.sh
# Windows
web\scripts\install.batThe installer creates .venv in the repository root, installs the Python requirements plus web/requirements.txt, and runs npm install inside web/.
python3 start.py WEBThe panel listens on http://127.0.0.1:5000 by default.
You can also run the launcher directly:
# Linux / macOS
bash web/scripts/start.sh
# Windows
web\scripts\start.batBoth panels read normal environment variables. web/.env.example is a reference; it is not loaded automatically.
Linux / macOS:
export WEB_HOST=127.0.0.1
export WEB_PORT=5000
export JWT_SECRET="$(python3 -c 'import secrets; print(secrets.token_hex(64))')"
python3 start.py WEBWindows PowerShell:
$env:WEB_HOST = "127.0.0.1"
$env:WEB_PORT = "5000"
$env:JWT_SECRET = "replace-with-64-bytes-or-more"
python start.py WEB| Variable | Default | Meaning |
|---|---|---|
WEB_HOST |
127.0.0.1 |
Bind address |
WEB_PORT |
5000 |
Bind port |
JWT_SECRET |
random per start | Token signing key |
Set JWT_SECRET to a fixed 64+ byte value if tokens should survive a restart. Generate one with:
node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"Do not bind the panel to 0.0.0.0 without a reverse proxy, TLS, and a real authentication layer.
- list Layer 4, Layer 7, and amplification methods;
- validate a public target;
- start and stop attack processes;
- stream logs over Server-Sent Events;
- show CPU, RAM, and network counters;
- list proxy files and wordlist counts;
- run DNS, WHOIS-style, ping, and HTTP checks.
The panel does not run the tools console. Use python3 start.py TOOLS for that.
web/
├── src/server.ts Express server
├── public/ static UI
├── package.json
├── tsconfig.json
└── scripts/
├── install.sh
├── install.bat
├── start.sh
└── start.bat
Build and serve:
cd web
npm ci
npm run build
npm run servenpm start runs the TypeScript server through tsx; npm run serve runs the compiled output.
python3 web/app.py --host 127.0.0.1 --port 5000It needs Flask from web/requirements.txt. The Flask panel starts start.py with a fixed @web-attack command and sends the task over stdin. The Node panel builds normal CLI arguments and spawns the same script.
- Both panels authenticate API calls with JWT tokens. The default secret is random per start; set
JWT_SECRETif you need stable sessions. - Targets are validated before they reach the child process. Private and loopback URLs are rejected for Layer 7.
- The Flask panel starts
start.pywith a fixed command and sends the task over stdin; request data is not placed inargv. - Keep the panel on localhost unless you add a reverse proxy and TLS.
| Problem | Fix |
|---|---|
Web panel dependencies are missing |
Run the installer, then start again |
node_modules exists but start fails |
Run npm ci in web/
|
| Panel starts but API returns 401 | Set a stable JWT_SECRET and reload |
| Port 5000 is busy | Set WEB_PORT or pass --port
|
python not found on Linux |
Activate .venv or install the venv build tools |
MHDDoS is for authorized testing only. Use it on systems you own or have written permission to test.
Issues · Discussions · Releases · Contributing · MIT License
MHDDoS
Start here
Methods
Configuration
Interfaces
Help
Community
Project