DANA – un Escaner de Red y Target Host escrito en Python

Durante las últimas 2 semanas, en los laboratorios de CTF desarrollados con los estudiantes, es muy común el uso de NMap para el escaneo de Redes y Host; sin embargo, a pesar de que esta herramienta ya viene disponible en Kali y se puede instalar sin problemas en la mayoría de distribuciones Linux, notamos que no existía una versión adecuada para Windows, podríamos instalar la versión de Nmap para Windows, pero no existe una versión ligera de tipo línea de comandos como es el caso de Linux, lo cual me ha llevado a desarrollar: «Dana un Escaner de Red y Target Host escrito en Python», el cual es compatible tanto en Windows como en Linux.
El análisis de redes es uno de los pilares del hacking ético y la administración de sistemas. Herramientas como Nmap son legendarias, pero suelen ser vistas como “cajas negras”. Con Dana el reto fue: crear un escáner desde cero en Python, modular y educativo y sencillo de usar, entendiendo cada línea de código que envía y recibe paquetes.
Arquitectura del proyecto
Dana está construido con una arquitectura modular clara. Cada módulo se encarga de una parte del proceso, permitiendo extender o reemplazar funcionalidades fácilmente:
dana/
│── dana.py # Entry point con menú principal
│── core.py # Motor central de escaneos
│── menu_host.py # Menú para escaneo individual
│── menu_cidr.py # Menú para escaneo de redes CIDR
│── modules/
│ ├── ports_syn.py # Escaneo clásico SYN
│ ├── ports_aggressive.py # Escaneo en rango definido por el usuario
│ ├── stealth.py # Escaneo FIN / NULL / XMAS
│ ├── services.py # Descubrimiento de servicios (banner / avanzado)
│ ├── network_cidr.py # Descubrimiento de hosts en red con ARP
│ └── top_ports.py # Lista Top 1000 puertos comunes
│── utils.py # Utilidades (colores, helpers, config persistente)
│── config.json # Configuración persistente
Librerías y dependencias
Dana se apoya en librerías de bajo nivel y auxiliares:
- Scapy → Manipulación de paquetes (TCP, IP, ARP, ICMP).
- Requests → Para consulta opcional de vendors MAC vía API.
- mac-vendor-lookup → Base local para identificar fabricantes de tarjetas.
- Colorama → Colores en la consola (interfaz tipo hacker).
Instalación
pip install scapy requests mac-vendor-lookup colorama
Requisitos
- Python 3.10+
- Librerías Python (ver
requirements.txt
) - Permisos de administrador (sudo en Linux / ejecutar desde cmd como administrador en Windows)
- Linux: no requiere instalación adicional
- Windows: requiere Npcap instalado
Instalación y Uso
git clone https://github.com/walthercurodelacruz/dana.git
cd dana
pip install -r requirements.txt
python dana.py
Flujo de funcionamiento
1. Escaneo de Host
- SYN Scan (
ports_syn.py
): envía paquetes TCP con flag SYN a los puertos definidos.- Si responde con
SYN/ACK
→ Puerto abierto. - Si responde con
RST
→ Puerto cerrado.
- Si responde con
- Modo Agresivo: permite al usuario definir un rango de puertos arbitrario (
1000-5000
, por ejemplo). - Escaneo Sigiloso (
stealth.py
): utiliza flags atípicos:- FIN → TCP con flag FIN.
- NULL → Sin flags.
- XMAS → Flags FIN + URG + PSH.
Estos escaneos suelen confundir firewalls, devolviendo estados open|filtered.
- Descubrimiento de servicios (
services.py
):- Básico: banner grabbing (lee el string de bienvenida de un servicio).
- Avanzado: sondas activas, similar a
nmap -sV
.
2. Escaneo de Red (CIDR)
- Se construyen paquetes ARP dentro de tramas Ethernet broadcast (
ff:ff:ff:ff:ff:ff
). - Scapy envía la consulta y recolecta respuestas (
srp
). - Por cada respuesta se obtiene:
- Dirección IP.
- MAC Address.
- Vendor (local o vía API).
- Estimación de SO con
guess_os()
(basada en TTL y Window Size).
3. Detección Heurística de SO
El módulo guess_os()
envía un SYN a puerto 80 y analiza:
- TTL típico = 64 → Linux/Unix.
- TTL típico = 128 → Windows.
- TTL > 128 → Routers, firewalls o sistemas embebidos.
No es exacto como un fingerprint activo, pero sí una buena aproximación en laboratorios.
Persistencia y Configuración
Dana utiliza un archivo config.json
donde guarda los últimos valores ingresados:
- Host objetivo.
- Rango de puertos o modo básico.
- Modo sigiloso (ON/OFF).
- Descubrimiento de servicios (ON/OFF).
- Interfaz seleccionada (Linux/Windows).
Esto permite reanudar escaneos rápidamente sin reconfigurar todo desde cero.
Compatibilidad Windows/Linux
Dana detecta el sistema operativo en tiempo de ejecución:
- En Linux usa
get_if_list()
para listar interfaces. - En Windows usa
get_windows_if_list()
, filtrando solo interfaces con IP activa. - Para que Scapy funcione en Windows, se construye el identificador Npcap válido:
De esta forma, el usuario selecciona la interfaz de red correcta tanto en Windows como Linux.
Disclaimer ⚠️
Este proyecto fue desarrollado con fines educativos y de investigación.
El uso de Dana en redes o sistemas sin autorización explícita es ilegal.
El autor no se responsabiliza por el uso indebido de esta herramienta.
Ejecutar únicamente en laboratorios controlados, entornos académicos o de prueba.