PortHound4 es una herramienta profesional de ciberseguridad para escaneo de red, deteccion de servicios y banner grabbing. Combina escaneo TCP/UDP, almacenamiento en SQLite y un API/WS ligero para integracion y control.
PortHound4 is a professional cybersecurity tool for network scanning, service detection, and banner grabbing. It combines TCP/UDP scanning, SQLite storage, and a lightweight API/WS layer for orchestration.
README.md-> guia principal del proyecto.FAST.md-> guia corta, directa y simple para arrancar rapido.docs/-> notas tecnicas adicionales.
- Escaneo TCP/UDP concurrente.
- Captura de banners con payloads extensos.
- Progreso reanudable por target.
- SQLite local, sin dependencias externas.
- API HTTP y WebSocket en un solo servidor.
- Frontend opcional en Vue 3.
Flujo recomendado: levantar
masteren HTTP interno y conectar agentes conagent_id + token.
Si quieres la version corta, abre FAST.md.
- Python 3.11+.
- Puertos abiertos entre nodos (por defecto
45678/tcp).
python3 -m venv env
env/bin/python -m pip install --upgrade pipOpcional (si prefieres activar el entorno):
source env/bin/activate- Arranque master (interactivo):
env/bin/python manage.pyEntrada directa equivalente:
env/bin/python master.pyAl ejecutar python manage.py, se asume master y te pedira:
IP:0.0.0.0Port:45678- (TLS queda desactivado por politica)
- Arranque por argumentos (equivalente):
env/bin/python manage.py \
--role master \
--host 0.0.0.0 \
--port 45678 \
--db-path Master.db- Arranque rapido sin argumentos:
env/bin/python manage.pymanage.py abre wizard en terminal (uno por uno) y usa la DB del rol (Master.db) como valores por defecto.
- Verifica que el master responda:
- UI/API:
http://localhost:45678ohttp://127.0.0.1:45678 - No uses
http://0.0.0.0:45678en el navegador. - Vista de agentes:
http://localhost:45678/cluster/agents/
- Si ya guardaste valores incorrectos en DB:
- Vuelve a ejecutar con argumentos explicitos (sobrescribe y guarda de nuevo).
- O ejecuta
env/bin/python manage.py --interactivey corrige los campos.
- En el master abre la web:
http://localhost:45678/cluster/agents/
- Pulsa
Agregar agente. - Copia
agent_id+tokendel bloque generado. - Copia el
ENROLL BASE64(contiene JSON con todo lo necesario). - Copia
COMANDO RAPIDO (copiar/pegar en el agente). - Ese bloque ya trae exactamente lo que debes responder en el wizard del agente.
- En el agente:
env/bin/python manage.py agentEntrada directa equivalente:
env/bin/python agent.pyAl ejecutar python manage.py agent, te pedira:
Enroll base64 (opcional): pega el base64 del master para autocompletar todo.agent_id:<agent_id generado en la web>token:<token generado en la web>master_ip:<IP del master>master_host:<host del master>
- Enroll directo (recomendado si ya tienes base64):
env/bin/python manage.py agent --enroll '<BASE64_DEL_MASTER>'- Inicia un agente por argumentos (opcional para remoto):
env/bin/python manage.py \
--role agent \
--master http://<MASTER_HOST>:45678 \
--agent-id <agent_id_generado_en_web> \
--agent-token <token_generado_en_web> \
--ip <IP_DE_SALIDA_DEL_AGENTE>- Alternativa rapida por env (sin argumentos):
export PORTHOUND_ROLE=agent
export PORTHOUND_MASTER=http://<MASTER_HOST>:45678
export PORTHOUND_AGENT_ID=<agent_id_generado_en_web>
export PORTHOUND_AGENT_TOKEN=<token_generado_en_web>
export PORTHOUND_IP=<IP_DE_SALIDA_DEL_AGENTE>
env/bin/python manage.py- Abre
http://<MASTER_HOST>:45678/cluster/agents/y confirmaonline. - Consulta API de agentes:
curl http://<MASTER_HOST>:45678/api/cluster/agentsenv/bin/python server.py # API de escaneo
env/bin/python ws_demo.py # Demo HTTP/WS- Inicia el master con
env/bin/python master.pyoenv/bin/python manage.py. - Abre
http://localhost:45678/cluster/agents/. - Crea una credencial de agente y copia
agent_id+token. - En el agente ejecuta
env/bin/python agent.pyoenv/bin/python manage.py agent. - Verifica en la vista de agentes que el estado aparezca como
online.
-
Only http:// URLs are supported:- El agente se configuro con
https://. - Solucion: usa
http://<master>:45678.
- El agente se configuro con
-
Invalid agent_id or token:agent_idotokenno coincide con la credencial activa en el master.- Solucion: regenera la credencial desde
/cluster/agents/y vuelve a cargarla en el agente.
-
El agente parece bloqueado al ejecutar una task:- Un escaneo
full(1-65534) puede tardar mucho tiempo seguntimesleepy timeouts de red. - El agente ahora imprime progreso periodico en consola:
[agent] task progress .... - Puedes ajustar deteccion de estancamiento con
PORTHOUND_AGENT_TASK_STALL_SECONDS(minimo 90, por defecto 300).
- Un escaneo
app.py-> app principal con rutasplain/api/ws.master.py-> arranque dedicado del rol master/standalone.agent.py-> runtime dedicado del rol agent y loop de ejecucion remota.framework.py-> micro framework interno (router, request/response, WS).server.py-> motor de escaneo TCP/UDP + banners + SQLite.ws_demo.py-> servidor HTTP/WS con ORM ligero y UI demo.settings.py-> configuracion del servidor.frontend/-> frontend Vue 3.scripts/generate_certs.py-> utilitario legacy de certificados (no requerido en el flujo actual).
GET /-> conteos (o HTML siAccept: text/html)GET /targets/POST /target/|PUT /target/|DELETE /target/GET /ports/|GET /ports/tcp/|GET /ports/udp/GET /banners/GET /tags/|GET /tags/tcp/|GET /tags/udp/GET /count/targets/|GET /count/ports/|GET /count/banners/
API WS demo:
GET /api/ws/clientsPOST /api/ws/broadcastPOST /api/ws/pingPOST /api/ws/closeGET /api/chat/messagesPOST /api/chat/clear
WebSocket:
ws://HOST:PORT/ws/
Cluster master/agent:
GET /api/cluster/agentsGET /api/cluster/agent/credentialsPOST /api/cluster/agent/credentialsDELETE /api/cluster/agent/credentialsPOST /api/cluster/agent/registerPOST /api/cluster/agent/task/pullPOST /api/cluster/agent/task/submit
cd frontend
npm install
npm run serveEl frontend es opcional. El backend master funciona sin compilar frontend/.
Advertencia: Esta herramienta debe ser utilizada unicamente con fines educativos, profesionales o de auditoria de seguridad en sistemas que sean de tu propiedad o con autorizacion explicita por escrito del propietario.
El uso de PortHound para realizar actividades maliciosas o no autorizadas va en contra de la etica profesional y puede violar leyes locales, nacionales o internacionales.
El autor no se hace responsable del mal uso, danos o consecuencias derivadas del uso indebido de esta herramienta. Todo usuario es responsable de cumplir con la legislacion vigente y actuar con integridad profesional.
Warning: This tool is intended solely for educational, professional, or authorized security auditing purposes on systems that you own or have explicit written permission to test.
Using PortHound for malicious or unauthorized activities goes against professional ethics and may violate local, national, or international laws.
The author is not responsible for any misuse, damage, or consequences resulting from the inappropriate use of this tool. Each user is responsible for complying with applicable laws and maintaining professional integrity.
Please report vulnerabilities privately. See SECURITY.md.
If PortHound helps your work and you want to support maintenance, you can donate in BTC:
bc1q3lhxpr9yantvefmvhpd2h4lu0ykf3t45zvuve2
Este proyecto esta licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para mas detalles.
This project is licensed under the MIT License. See LICENSE for details.