Imagen gráfica de Masscan para principiantes. El diseño incluye el logo de Masscan, una red de conexiones y el texto "Masscan-Principiantes Guía Completa".
Aprende los comandos básicos de Masscan, su sintaxis y ejemplos prácticos. ¡Domina Masscan fácilmente!

Masscan para Principiantes: Guía Completa de Comandos Básicos, Sintaxis y Ejemplos

Si estás leyendo esto, es porque, al igual que yo, te atraen las profundidades inexploradas de las redes. Puede que seas un administrador de sistemas que gestiona cientos o miles de máquinas, un pentester buscando puertas abiertas en una infraestructura, o simplemente un entusiasta curioso que desea comprender cómo funciona este mundo digital.

En cualquier caso, tarde o temprano te enfrentarás a la tarea de escanear rápida y eficientemente grandes rangos de direcciones IP en busca de puertos abiertos. Y aquí es donde entra en escena nuestro héroe de hoy: Masscan.

Olvida los escaneos lentos y metódicos que duran horas o incluso días. Masscan es un verdadero demonio de la velocidad, capaz de interrogar toda la red IPv4 en menos de 5 minutos (¡con un ancho de banda suficiente, por supuesto!). ¿Suena intrigante? ¡Claro que sí! En este artículo, como dos compañeros de trabajo, desmenuzaremos Masscan: desde los fundamentos y los comandos básicos hasta ejemplos prácticos e incluso pequeños scripts. El objetivo es que, después de leerlo, puedas usar con confianza esta poderosa herramienta para tus tareas.

Así que sírvete tu bebida favorita, ponte cómodo, abre tu terminal… ¡y vamos a explorar el mundo de Masscan juntos!

Tabla de Contenido

¿Qué es Masscan y por qué es tan rápido?

Captura de pantalla de una terminal mostrando un comando Masscan en ejecución, que escanea el puerto 80 de una dirección IP específica y muestra los banners, utilizando una dirección IP de origen específica.
Este ejemplo de comando Masscan muestra cómo escanear un puerto específico (puerto 80) y obtener banners de un host.

Masscan es la creación de Robert David Graham, un reconocido experto en seguridad. Se presenta como “el escáner de puertos más rápido de Internet”. Y no es solo una estrategia de marketing. La diferencia clave entre Masscan y los escáneres tradicionales, como Nmap (del que hablaremos más adelante), radica en su enfoque para enviar y recibir paquetes.

Imagina un escáner tradicional (como Nmap por defecto). Envía un paquete (por ejemplo, una solicitud SYN a un puerto determinado) a un host de destino y luego espera una respuesta (SYN-ACK, RST o tiempo de espera) antes de enviar el siguiente paquete o pasar al siguiente host. Esto se llama escaneo stateful: el escáner rastrea el estado de cada conexión. Es confiable, permite un análisis profundo de la respuesta, pero es lento, especialmente al escanear miles o millones de direcciones.

Masscan utiliza un enfoque stateless (o asincrónico). Funciona más bien como un “lanzallamas”:

  • Envío desenfrenado: Masscan genera y envía paquetes TCP SYN (por defecto) a las IP y puertos de destino a la máxima velocidad posible que le indiques (o que pueda soportar tu red y sistema). No espera una respuesta después de enviar cada paquete.
  • Recepción independiente: Paralelamente al envío, Masscan escucha la interfaz de red en busca de paquetes entrantes (SYN-ACK de puertos abiertos o RST de puertos cerrados).
  • Correspondencia sobre la marcha: Cuando llega un paquete de respuesta (por ejemplo, SYN-ACK), Masscan extrae rápidamente la información (dirección IP de origen, puerto de origen, número de secuencia TCP) y la compara con la lista de solicitudes enviadas para determinar qué puerto en qué host respondió. Para ello, utiliza técnicas especiales de codificación de información en los paquetes salientes.

Este enfoque asincrónico permite a Masscan alcanzar velocidades de millones de paquetes por segundo. No pierde tiempo esperando una respuesta para cada sonda individual. Es por eso que puede escanear enormes espacios de direcciones en cuestión de minutos.

Sin embargo, esa velocidad tiene su contrapartida, de la que hablaremos más adelante.

Masscan vs Nmap: ¿Cuándo usar cuál?

Ilustración de Masscan y Nmap como boxeadores enfrentados. Masscan se representa con un globo terráqueo dentro de un visor, y Nmap con un ojo cibernético.
¿Masscan o Nmap? Descubre cuál scanner de redes se adapta mejor a tus necesidades.

Esta es una pregunta frecuente entre los principiantes. Nmap es una navaja suiza para el escaneo de red. Puede hacer muchísimas cosas: diferentes tipos de escaneo (TCP Connect, SYN, UDP, Xmas, FIN, etc.), determinación de versiones de servicios, determinación del SO, ejecución de scripts NSE para buscar vulnerabilidades y mucho más. Nmap es una herramienta para la investigación profunda y detallada de uno o varios hosts.

Masscan es una herramienta para la investigación amplia, pero superficial. Su principal objetivo es encontrar puertos abiertos en una gran cantidad de hosts lo más rápido posible. No está diseñado para determinar las versiones de los servicios (aunque hay una opción experimental --banners, es limitada) o ejecutar scripts complejos.

Aquí tienes una breve tabla comparativa:

ParámetroMasscanNmap
Objetivo principalDetección rápida de puertos abiertos en redes grandesEscaneo detallado de hosts, determinación de servicios, SO, vulnerabilidades
VelocidadMuy alta (millones de paquetes/segundo)Baja/Media (depende del tipo de escaneo y opciones)
Tipo de escaneo por defectoTCP SYN (Stateless)TCP SYN (Stateful) para root, TCP Connect para non-root
PrecisiónPuede omitir puertos a velocidades muy altas o con mala calidad de redAlta (el enfoque stateful es más confiable)
Determinación de versiones/SOLimitado (--banners)/NoExcelente/Excelente
Soporte de scriptsNoAmplio (NSE)
Complejidad de usoMás simple para el escaneo básico de puertosMás complejo debido a la gran cantidad de opciones
Escenario idealReconocimiento inicial de redes grandes (todo Internet, grandes redes corporativas), búsqueda rápida de un puerto abierto específicoEscaneo profundo de hosts/subredes específicos, pentesting, auditoría de seguridad

Conclusión: Masscan y Nmap no son intercambiables, sino que se complementan. A menudo se utiliza una combinación: primero, Masscan encuentra rápidamente los hosts “interesantes” con puertos abiertos en una red grande, y luego Nmap se utiliza para estudiar en detalle esos hosts concretos.

Instalación de Masscan: Preparando nuestra herramienta

Antes de empezar a escanear, debemos instalar Masscan. Afortunadamente, es bastante sencillo en la mayoría de los sistemas populares.

Instalación en Linux

En la mayoría de las distribuciones Linux modernas, Masscan está disponible en los repositorios estándar.

Debian / Ubuntu y derivados:

sudo apt update
sudo apt install masscan -y

RHEL / CentOS / Fedora:

# Para Fedora
sudo dnf install masscan -y

# Para RHEL/CentOS (puede necesitar el repositorio EPEL)
sudo yum install epel-release -y # Si EPEL aún no está instalado
sudo yum install masscan -y

Después de la instalación, comprueba que todo funciona:

masscan --version

Instalación en macOS

La forma más sencilla de instalar Masscan en macOS es usar el gestor de paquetes Homebrew.

Si aún no tienes Homebrew, instálalo siguiendo las instrucciones del sitio web oficial. Luego, ejecuta en la terminal:

brew install masscan

Comprobamos:

masscan --version

Instalación en Windows (a través de WSL)

Masscan no funciona muy bien de forma nativa en Windows debido a las características de la pila de red y los controladores (especialmente con la pila TCP/IP personalizada que Masscan utiliza para la velocidad). Se recomienda encarecidamente utilizar el Subsistema de Windows para Linux (WSL).

  1. Instala WSL (se recomienda WSL 2) y cualquier distribución Linux (por ejemplo, Ubuntu) desde Microsoft Store.
  2. Inicia tu distribución Linux en WSL.
  3. Ejecuta los comandos de instalación para Linux, como se describe anteriormente (por ejemplo, sudo apt update && sudo apt install masscan -y para Ubuntu).

Existen versiones compiladas .exe de Masscan para Windows (puedes encontrarlas en la página de lanzamientos de GitHub o en otros lugares), pero pueden requerir la instalación de controladores especiales (npcap/winpcap) y a menudo funcionan de forma menos estable y más lenta que en Linux o macOS.

Compilación desde el código fuente (para avanzados)

Si deseas la versión más reciente o Masscan no está en los repositorios de tu sistema, siempre puedes compilarlo desde el código fuente. Para ello, normalmente se necesita un compilador (gcc o clang) y una biblioteca para capturar paquetes (libpcap-dev o libpcap-devel).

  1. Instala las dependencias:
    • Debian/Ubuntu: sudo apt install git gcc make libpcap-dev
    • RHEL/CentOS/Fedora: sudo yum install git gcc make libpcap-devel
  2. Clona el repositorio:
git clone https://github.com/robertdavidgraham/masscan.git
cd masscan
  1. Compila e instala:
make -j$(nproc) # Usamos todos los núcleos para acelerar la compilación
sudo make install

Después de esto, el archivo ejecutable masscan debería aparecer en /usr/local/bin (o en otro lugar, dependiendo de la configuración de make install).

Conceptos clave de Masscan

Para utilizar Masscan eficazmente, es importante comprender algunos conceptos clave en los que se basa.

Escaneo Stateless (asincrónico)

Como ya hemos mencionado, este es el corazón de Masscan. No admite el estado completo de la conexión TCP para cada sonda. En cambio, envía paquetes SYN y simplemente escucha las respuestas SYN-ACK.

Ventajas: Velocidad increíble.

Desventajas:

  • Pérdida potencial de paquetes: A velocidades de escaneo muy altas o con sobrecarga de red (la tuya o la de destino), algunos paquetes de respuesta pueden perderse. El equipo de red (cortafuegos, routers) o el propio sistema operativo pueden descartar paquetes si los búferes están llenos. Masscan no volverá a enviar una solicitud si no recibe respuesta (a diferencia de los escáneres stateful, que pueden hacer retransmisiones). Esto significa que Masscan puede omitir algunos puertos abiertos, especialmente en redes inestables o con velocidades agresivas.
  • Cierre de la conexión: Masscan, por defecto, envía un paquete RST después de recibir el SYN-ACK para cerrar inmediatamente la conexión semiob abierta y no dejarla colgando en el sistema de destino. Este es un comportamiento estándar para el escaneo SYN.

Control de velocidad (--rate) ¡Parámetro crucial!

Este es, probablemente, el parámetro más importante en Masscan. Determina cuántos paquetes por segundo enviará el escáner.

--rate <paquetes_por_segundo>

¿Por qué es tan importante?

  • Rendimiento: Una velocidad demasiado baja anulará la principal ventaja de Masscan. Una velocidad demasiado alta puede sobrecargar tu propio canal de red, el procesador o, peor aún, el equipo de red en el camino hacia el objetivo o el propio objetivo.
  • Precisión: Como ya se ha mencionado, una velocidad demasiado alta aumenta la probabilidad de pérdida de paquetes de respuesta y, por lo tanto, de omitir puertos abiertos.
  • Legalidad y ética: Escanear a una velocidad muy alta puede considerarse un ataque DoS (Denial of Service). Esto puede provocar el bloqueo de tu dirección IP, quejas a tu proveedor o incluso consecuencias legales si escaneas objetivos sin permiso. ¡Sé siempre responsable y empieza con velocidades bajas!

¿Qué velocidad elegir? Depende de muchos factores:

  • Tu ancho de banda de red (Upload).
  • La potencia de tu procesador.
  • El rendimiento de la tarjeta de red y sus controladores.
  • Las características de la red que estás escaneando.
  • La presencia y la configuración de los cortafuegos/IPS en el camino.

Recomendaciones:

  • Empieza poco a poco: Prueba --rate 100 o --rate 1000. Observa la salida, comprueba la carga de la red y el procesador.
  • Red local: En tu red local (si es gigabit), puedes probar velocidades mucho más altas, por ejemplo, --rate 10000 o incluso --rate 100000, pero controla la carga en los conmutadores y los hosts finales.
  • Internet: Al escanear redes externas, ten mucho cuidado. Una velocidad de 1000 paquetes/segundo ya es bastante notable. 10000 es agresivo. Las velocidades superiores a 100000 pueden provocar problemas rápidamente. El autor de Masscan afirma que para escanear todo Internet se necesita una velocidad de unos 10 millones de paquetes/segundo, pero esto requiere una infraestructura y unos permisos muy específicos.
  • Experimenta: Aumenta gradualmente la velocidad y compara los resultados (número de puertos encontrados) y observa la estabilidad. Encuentra un equilibrio entre velocidad y precisión/seguridad.

Por defecto, Masscan utiliza una velocidad de 100 paquetes/segundo, lo que es bastante conservador.

Randomización de objetivos

A diferencia de Nmap, que por defecto escanea los hosts secuencialmente (1.1.1.1, luego 1.1.1.2, etc.), Masscan randomiza el orden de escaneo de las direcciones IP y los puertos en todo el rango especificado. Esto se hace para:

  • Evitar la concentración de tráfico en una sola subred en un momento dado, lo que puede sobrecargar el equipo local o activar sistemas de detección de intrusos (IPS/IDS) configurados para detectar escaneos secuenciales.
  • Asegurar una distribución más uniforme de la carga en todo el rango de escaneo.

Esta randomización es una parte integral de la arquitectura de Masscan y no se puede desactivar.

Sintaxis básica y comandos principales de Masscan

La sintaxis general del comando Masscan es la siguiente:

masscan [objetivos] -p[puertos] [opciones]

Analicemos los componentes principales.

Especificación de objetivos (direcciones IP, rangos, redes, archivos)

Los objetivos se pueden especificar de varias maneras:

  • Una dirección IP: masscan 192.168.1.1 ...
  • Una lista de direcciones IP: masscan 192.168.1.1 10.0.0.5 8.8.8.8 ...
  • Un rango de direcciones IP: masscan 192.168.1.1-192.168.1.254 ...
  • Una red en notación CIDR: masscan 10.0.0.0/8 ... # ¡Rango enorme! Ten cuidado. masscan 192.168.1.0/24 ... # Red doméstica/de oficina estándar
  • Direcciones aleatorias (para probar Internet): masscan 0.0.0.0/0 ... # ¡Todo el rango IPv4! ¡Requiere especial cuidado y permisos!
  • Lectura de objetivos desde un archivo (-iL): Útil si tienes una lista grande de direcciones IP o redes.
# Contenido del archivo targets.txt:
# 192.168.1.1
# 192.168.2.0/24
# 10.10.0.5-10.10.0.10
masscan -iL targets.txt ...

Especificación de puertos (-p)

Los puertos para escanear se especifican con la opción -p. Ten en cuenta que no debe haber espacios entre -p y el número de puerto (o rango).

  • Un puerto: masscan [objetivos] -p80 ... # Escanear solo el puerto 80 (HTTP)
  • Una lista de puertos separados por comas: masscan [objetivos] -p80,443,22 ... # Escanear los puertos 80, 443, 22
  • Un rango de puertos separados por guiones: masscan [objetivos] -p1-1024 ... # Escanear todos los puertos del 1 al 1024
  • Una combinación de listas y rangos: masscan [objetivos] -p21-23,80,443,8000-8100 ...
  • Todos los puertos (0-65535): masscan [objetivos] -p0-65535 ... # Escanear todos los puertos posibles
  • Puertos UDP (--udp-ports): Masscan es principalmente un escáner TCP, pero puede escanear puertos UDP. Esto es significativamente más lento y menos confiable, ya que UDP es un protocolo sin establecimiento de conexión, y los puertos UDP abiertos a menudo no responden, mientras que los cerrados pueden responder con ICMP Port Unreachable.
    masscan [objetivos] --udp-ports 53,161 ... # Escanear puertos UDP 53 (DNS) y 161 (SNMP)

Control de velocidad (--rate)

Ya hemos discutido la importancia de este parámetro. La sintaxis es sencilla:

masscan [objetivos] -p[puertos] --rate 1000 # Establecer la velocidad a 1000 paquetes/segundo

Recuerda: ¡Empieza despacio y aumenta con cuidado!

Selección de la interfaz de red (-e o --adapter)

Si tu equipo tiene varias interfaces de red (por ejemplo, Ethernet, Wi-Fi, VPN), Masscan puede intentar adivinar cuál usar. Pero es mejor especificarlo explícitamente con la opción -e o --adapter.

masscan [objetivos] -p[puertos] --rate [velocidad] -e eth0 # Usar la interfaz eth0
masscan [objetivos] -p[puertos] --rate [velocidad] --adapter en0 # Usar la interfaz en0 (a menudo en macOS)

Puedes ver una lista de las interfaces disponibles con el comando ip addr (Linux) o ifconfig (macOS/Linux).

Especificación de IP y puerto de salida (--source-ip, --source-port)

A veces, es posible que necesites enviar paquetes desde una dirección IP específica (si tienes varias en una interfaz) o incluso desde un puerto de salida específico (aunque Masscan suele elegirlos dinámicamente).

--source-ip: Establece la dirección IP de origen para los paquetes salientes. Útil si tienes varias IP en una interfaz.
masscan [objetivos] -p[puertos] --rate [velocidad] -e eth0 --source-ip 192.168.1.100

--source-port <puerto>: Establece un puerto de origen estático. Normalmente no es necesario e incluso puede ser perjudicial, ya que limita el número de “pseudoconexiones” simultáneas. Úsalo con precaución.
masscan [objetivos] -p[puertos] --rate [velocidad] --source-port 44444

Formatos de salida (-oX, -oG, -oJ, -oL)

Por defecto, Masscan muestra los resultados en formato de texto directamente en la consola. Sin embargo, para un procesamiento posterior o un almacenamiento más conveniente, es mejor utilizar formatos de archivo estandarizados:

  • -oX <archivo.xml>: Salida en formato XML, compatible con Nmap. Muy útil para importar a otras herramientas o analizar con scripts.
    masscan [objetivos] -p[puertos] --rate [velocidad] -oX results.xml
  • -oG <archivo.gnmap>: Salida en formato Grepable Nmap. Cada línea contiene información sobre un host o puerto, se procesa fácilmente con las utilidades grep, awk, cut.
    masscan [objetivos] -p[puertos] --rate [velocidad] -oG results.gnmap
  • -oJ <archivo.json>: Salida en formato JSON. Conveniente para analizar con scripts en Python, JavaScript, etc.
    masscan [objetivos] -p[puertos] --rate [velocidad] -oJ results.json
  • -oL <archivo.list>: Formato de lista simple. Cada línea contiene información sobre un puerto abierto encontrado.
    masscan [objetivos] -p[puertos] --rate [velocidad] -oL results.list

Puedes usar varios formatos de salida simultáneamente:

masscan 192.168.1.0/24 -p80,443 --rate 1000 -oX scan.xml -oG scan.gnmap

Otros flags útiles

  • --wait <segundos>: Tiempo de espera después de completar el envío de todos los paquetes para recopilar las respuestas restantes. Por defecto, 10 segundos. Aumentar este valor puede ayudar a recopilar más respuestas en redes lentas o congestionadas, pero ralentizará el tiempo total de escaneo.
    masscan [objetivos] -p[puertos] --rate [velocidad] --wait 30 # Esperar 30 segundos después del envío
  • --banners: Función experimental para intentar capturar banners (información que el servicio envía al conectarse). Masscan establece una breve conexión TCP después de detectar un puerto abierto (SYN-ACK -> ACK), lee los primeros bytes de la respuesta y luego cierra la conexión (RST). No es tan fiable como la determinación de versiones en Nmap, y puede no funcionar para muchos servicios o ser incompleta. También ralentiza el escaneo. Úsalo con precaución y no confíes en él como el método principal para determinar los servicios.
    masscan [objetivos] -p22,80,443 --rate [velocidad] --banners -oJ banner_results.json
  • --exclude: Excluye las direcciones especificadas del escaneo. Se puede usar varias veces.
    masscan 192.168.1.0/24 -p1-1024 --rate 1000 --exclude 192.168.1.1 --exclude 192.168.1.100
  • --excludefile <archivo_excepciones>: Lee una lista de direcciones IP, rangos o redes para excluir del archivo (el formato es el mismo que para -iL).
# Contenido de exclude.txt:
# 192.168.1.1
# 192.168.1.254
masscan 192.168.1.0/24 -p1-65535 --rate 5000 --excludefile exclude.txt -oL results.list

--open-only (o --open): Mostrar solo los puertos abiertos (comportamiento por defecto).
--echo: Guarda la configuración actual en un archivo (por ejemplo, masscan.conf) y sale. Útil para crear un archivo de configuración básico.
masscan --echo > my_masscan_config.conf

Estos son los parámetros principales que necesitarás para empezar. Siempre puedes ver la lista completa de opciones con el comando masscan --help.

Ejemplos prácticos de uso de Masscan

La teoría está bien, ¡pero la práctica es mejor! Veamos algunos escenarios típicos de uso de Masscan.

Importante: Al realizar los siguientes ejemplos (especialmente en redes externas), recuerda siempre las consideraciones éticas y la legalidad. Si no estás seguro, escanea solo aquellas redes y hosts para los que tienes permiso explícito.

Ejemplo 1: Escanear un solo host en varios puertos populares

Supongamos que quieres comprobar si los puertos SSH (22), HTTP (80) y HTTPS (443) están abiertos en el host 192.168.1.1. Te encuentras en una red local, por lo que puedes permitirte una velocidad moderada, digamos, 1000 pkt/s.

sudo masscan 192.168.1.1 -p22,80,443 --rate 1000 -e eth0

(No olvides sudo, ya que Masscan requiere permisos de root para enviar paquetes sin procesar y escuchar la interfaz en modo promiscuo).

Salida aproximada en la consola:

Starting masscan 1.3.2 (http://bit.ly/masscan) at 2024-09-16 10:30:00 GMT
 -- Interfacing eth0...
 -- Initializing parser...
 -- Initializing fields...
 -- Scanning 1 hosts [3 ports/host]
Discovered open port 80/tcp on 192.168.1.1
Discovered open port 443/tcp on 192.168.1.1
rate: 1000.00-kpps, 100.00% done, 0:00:00 remaining, found=2

Ejemplo 2: Escanear una subred en puertos web estándar

Ahora, encontremos todos los hosts en la red 192.168.1.0/24 que tengan abiertos los puertos 80 (HTTP), 443 (HTTPS), 8080 (a menudo HTTP alternativo) y 8443 (a menudo HTTPS alternativo). Guardaremos los resultados en un archivo XML para su posterior análisis.

sudo masscan 192.168.1.0/24 -p80,443,8080,8443 --rate 1500 -e eth0 -oX web_scan_results.xml

Masscan comenzará el escaneo. Después de que termine (normalmente muy rápido para esta tarea), tendrás un archivo web_scan_results.xml con la lista de hosts y puertos abiertos del conjunto especificado.

Ejemplo 3: Escanear una red grande en un solo puerto (SSH)

Imaginemos que necesitas encontrar rápidamente todas las máquinas con el puerto SSH (22) abierto en un amplio rango de direcciones, por ejemplo, 10.0.0.0/16. Esto son 65536 direcciones. Aquí la velocidad de Masscan es especialmente útil.

¡Cuidado! Escanear rangos tan grandes, especialmente si no te pertenecen, puede ser peligroso e ilegal. Este ejemplo solo se proporciona para mostrar las capacidades de Masscan.

Usaremos una velocidad moderada (por ejemplo, 5000 pkt/s) y guardaremos los resultados en una lista simple.

sudo masscan 10.0.0.0/16 -p22 --rate 5000 -e eth0 -oL ssh_found.list --wait 20

También hemos añadido --wait 20 para dar más tiempo a la recepción de respuestas de una red tan grande.

Ejemplo 4: Escanear usando un archivo de exclusiones

Supongamos que quieres escanear la red 192.168.0.0/16 en busca del puerto 3389 (RDP) abierto, pero necesitas excluir algunos servidores y subredes importantes. Crea un archivo exclude_hosts.txt:

# exclude_hosts.txt
192.168.1.1 # Nuestra puerta de enlace
192.168.10.0/24 # Red de desarrollo
192.168.100.50 # Servidor importante

Ahora ejecuta Masscan:

sudo masscan 192.168.0.0/16 -p3389 --rate 2000 --excludefile exclude_hosts.txt -oG rdp_scan.gnmap

Masscan escaneará todo el rango /16, pero omitirá las direcciones especificadas en exclude_hosts.txt.

Ejemplo 5: Escanear un rango en TODOS los puertos (¡Cuidado!)

A veces es necesario comprobar absolutamente todos los puertos TCP (0-65535) en un pequeño número de hosts. Este es un escaneo muy “ruidoso”, que genera mucho tráfico y puede ser fácilmente detectado.

¡Úsalo con mucha precaución y solo si es necesario y tienes los permisos!

sudo masscan 192.168.1.10-192.168.1.20 -p0-65535 --rate 10000 -oJ full_scan.json

Este escaneo tomará más tiempo que escanear solo unos pocos puertos, incluso con una alta velocidad, simplemente debido a la enorme cantidad de paquetes que hay que enviar (11 hosts * 65536 puertos = ~720 mil paquetes).

Ejemplo 6: Guardar los resultados en diferentes formatos

Queremos escanear la red 172.16.0.0/22 en los puertos 21 (FTP), 22 (SSH), 23 (Telnet) y guardar los resultados en formatos XML y Grepable a la vez.

sudo masscan 172.16.0.0/22 -p21-23 --rate 3000 -oX scan_results.xml -oG scan_results.gnmap

Después del escaneo, tendrás dos archivos: scan_results.xml y scan_results.gnmap con los mismos resultados, pero en diferentes representaciones.

Ejemplo 7: Intentar recopilar banners (con matices)

Intentemos encontrar servidores web en la red 192.168.50.0/24 y capturar sus banners HTTP. Usaremos la opción --banners y guardaremos en JSON.

sudo masscan 192.168.50.0/24 -p80,8080 --rate 1000 --banners -oJ web_banners.json

Abre el archivo web_banners.json después del escaneo. Verás una estructura JSON donde para cada puerto encontrado habrá un campo banner (si se ha podido obtener). Por ejemplo:

[
  { "ip": "192.168.50.10", "timestamp": "1663326000", "ports": [ {"port": 80, "proto": "tcp", "status": "open", "reason": "syn-ack", "ttl": 64, 
    "service": {"name": "http", "banner": "HTTP/1.1 200 OK\r\nServer: nginx/1.18.0\r\n..."}} ] }
 ,
  { "ip": "192.168.50.25", "timestamp": "1663326001", "ports": [ {"port": 8080, "proto": "tcp", "status": "open", "reason": "syn-ack", "ttl": 128,
    "service": {"name": "http-proxy", "banner": "HTTP/1.0 403 Forbidden\r\nServer: squid/3.5.27\r\n..."}} ] }
]

Recuerda: Los banners obtenidos por Masscan pueden estar truncados o faltar por completo. Para una determinación fiable de las versiones, usa Nmap (nmap -sV).

Scripts con Masscan: Automatización de la rutina

Masscan es ideal para integrarse en scripts de automatización. Gracias a sus formatos de salida simples (especialmente -oL y -oG) y a la posibilidad de leer objetivos desde un archivo (-iL), es fácil de integrar en tus flujos de trabajo.

Script Bash: Escanear una lista de objetivos desde un archivo

Supongamos que tienes un archivo networks_to_scan.txt que contiene una lista de redes e IPs:

# networks_to_scan.txt
10.1.1.0/24
10.1.2.0/24
172.17.5.10

Queremos escanear todos estos objetivos en busca de los puertos RDP (3389) y SMB (445) y guardar el resultado.

#!/bin/bash

# Archivo con los objetivos
TARGET_FILE="networks_to_scan.txt"
# Puertos para escanear
PORTS="3389,445"
# Velocidad de escaneo
RATE="2500"
# Archivo para la salida (Grepable)
OUTPUT_FILE="scan_$(date +%Y%m%d_%H%M%S).gnmap"
# Interfaz de red (cambia si es necesario)
INTERFACE="eth0"

# Comprobar la existencia del archivo con los objetivos
if [ ! -f "$TARGET_FILE" ]; then
  echo "Error: ¡El archivo con los objetivos '$TARGET_FILE' no se ha encontrado!"
  exit 1
fi

echo "Comenzando el escaneo de objetivos desde $TARGET_FILE en los puertos $PORTS..."
echo "Velocidad: $RATE pkt/s. Los resultados se guardarán en $OUTPUT_FILE"

# Ejecutar Masscan
sudo masscan -iL "$TARGET_FILE" -p"$PORTS" --rate "$RATE" -e "$INTERFACE" -oG "$OUTPUT_FILE" --wait 15

echo "Escaneo completado. Resultados en el archivo: $OUTPUT_FILE"

# Opcional: mostrar el número de hosts encontrados
FOUND_HOSTS=$(grep -c "Status: Open" "$OUTPUT_FILE")
echo "Puertos abiertos encontrados: $FOUND_HOSTS"

exit 0

Guarda este código en un archivo (por ejemplo, scan_targets.sh), hazlo ejecutable (chmod +x scan_targets.sh) y ejecútalo (./scan_targets.sh). El script realizará el escaneo e informará de los resultados.

Script Bash: Procesamiento simple de la salida (extracción de IP y puertos)

A menudo, después del escaneo, solo necesitamos una lista de direcciones IP y puertos abiertos. El formato -oG es ideal para esto. Supongamos que tenemos un archivo results.gnmap:

# Masscan 1.3.2 scan initiated Tue Sep 17 11:00:00 2024
Host: 192.168.1.10 () Status: Up
Host: 192.168.1.15 () Status: Up
Host: 192.168.1.10 () Ports: 80/open/tcp////
Host: 192.168.1.22 () Status: Up
Host: 192.168.1.15 () Ports: 443/open/tcp////
Host: 192.168.1.22 () Ports: 22/open/tcp////
# Masscan done at Tue Sep 17 11:00:05 2024

Podemos extraer solo las líneas con puertos abiertos y mostrarlas en el formato IP:PORT usando grep y awk:

#!/bin/bash

GNMAP_FILE="results.gnmap"

# Comprobar la existencia del archivo
if [ ! -f "$GNMAP_FILE" ]; then
  echo "Error: ¡El archivo '$GNMAP_FILE' no se ha encontrado!"
  exit 1
fi

echo "Extrayendo IP:PORT desde $GNMAP_FILE..."

# Usar grep para seleccionar las líneas con "Ports:" y "open"
# Usar awk para formatear la salida
grep "Ports:" "$GNMAP_FILE" | grep "/open/" | awk '{print $2 ":" $4}' | sed 's|/open/tcp/.*||'

echo "Listo."
exit 0

Ejecutar este script (por ejemplo, parse_gnmap.sh) en el results.gnmap anterior dará la siguiente salida:

Extrayendo IP:PORT desde results.gnmap...
192.168.1.10:80
192.168.1.15:443
192.168.1.22:22
Listo.

Integración de Masscan y Nmap: Velocidad + Profundidad

Este es un escenario clásico de uso: Masscan encuentra rápidamente los hosts con los puertos que te interesan, y luego Nmap los investiga en detalle.

Primero, ejecutamos Masscan para encontrar hosts con puertos 80 y 443 abiertos en la red, y guardamos el resultado en formato -oL (lista simple):

sudo masscan 192.168.1.0/24 -p80,443 --rate 1500 -oL masscan_web_raw.list

El archivo masscan_web_raw.list tendrá un aspecto similar a este:

# Masscan 1.3.2 scan initiated Tue Sep 17 11:15:00 2024
open tcp 80 192.168.1.10 1663327000
open tcp 443 192.168.1.10 1663327001
open tcp 80 192.168.1.55 1663327002
# Masscan done at Tue Sep 17 11:15:05 2024

Ahora necesitamos extraer las direcciones IP únicas de este archivo y pasarlas a Nmap para el escaneo de versiones (-sV) y scripts estándar (-sC).

#!/bin/bash

MASSCAN_LIST_FILE="masscan_web_raw.list"
NMAP_OUTPUT_XML="nmap_detailed_scan.xml"
NMAP_OUTPUT_NMAP="nmap_detailed_scan.nmap"

# Comprobar la existencia del archivo Masscan
if [ ! -f "$MASSCAN_LIST_FILE" ]; then
  echo "Error: ¡El archivo Masscan '$MASSCAN_LIST_FILE' no se ha encontrado!"
  exit 1
fi

echo "Extrayendo IPs únicas desde $MASSCAN_LIST_FILE..."

# Extraer IP (4º campo), ordenar únicas
TARGET_IPS=$(grep "open tcp" "$MASSCAN_LIST_FILE" | awk '{print $4}' | sort -u)

if [ -z "$TARGET_IPS" ]; then
  echo "No se han encontrado puertos abiertos en el archivo Masscan. Finalizando."
  exit 0
fi

echo "Hosts encontrados para el escaneo detallado de Nmap:"
echo "$TARGET_IPS"
echo "--------------------------------------------------"

echo "Ejecutando Nmap para el escaneo detallado (versiones y scripts)..."
# Pasar la lista de IPs a Nmap a través de xargs o directamente, si no hay demasiadas
# La opción -Pn es necesaria, ya que ya sabemos que los hosts están disponibles (ya que Masscan los ha encontrado)
# La opción -sV para determinar las versiones
# La opción -sC para los scripts estándar
# La opción -oX y -oN para guardar los resultados de Nmap

echo "$TARGET_IPS" | sudo nmap -sV -sC -Pn -iL - -oX "$NMAP_OUTPUT_XML" -oN "$NMAP_OUTPUT_NMAP"

# Opción alternativa con xargs (si la lista de IPs es muy grande):
# echo "$TARGET_IPS" | xargs sudo nmap -sV -sC -Pn -oX "$NMAP_OUTPUT_XML" -oN "$NMAP_OUTPUT_NMAP"

echo "Escaneo detallado de Nmap completado."
echo "Resultados guardados en $NMAP_OUTPUT_XML y $NMAP_OUTPUT_NMAP"

exit 0

Este script primero extrae las direcciones IP encontradas por Masscan, y luego las usa como entrada para Nmap, ejecutando un escaneo más profundo solo en estos hosts “vivos”. Esto ahorra mucho tiempo en comparación con ejecutar nmap -sV -sC en toda la subred.

Consejos y trucos avanzados

Una vez que domines los fundamentos, puedes echar un vistazo a algunas posibilidades y técnicas más avanzadas.

Uso de archivos de configuración (--conf)

Si usas con frecuencia los mismos parámetros de Masscan (por ejemplo, una velocidad determinada, interfaz, puertos predeterminados), es conveniente guardarlos en un archivo de configuración. Masscan busca el archivo masscan.conf en /etc/, ~/.masscan/ y en el directorio actual, o puedes especificar la ruta al archivo usando la opción --conf.

Ejemplo de archivo my_scan.conf:

# Mi configuración estándar para Masscan
rate = 10000.0
adapter = eth0
wait = 15
# Puertos predeterminados (se pueden sobrescribir en la línea de comandos)
ports = 21,22,23,25,80,110,135,139,443,445,3389,8080
# Archivo de exclusiones predeterminado
excludefile = /home/user/global_exclude.txt

Ahora puedes ejecutar el escaneo así:

sudo masscan 10.0.0.0/16 --conf my_scan.conf -oG big_scan.gnmap
# O si quieres escanear otros puertos, simplemente indícalos:
sudo masscan 10.0.0.0/16 -p53,161 --conf my_scan.conf -oG dns_snmp_scan.gnmap

Los parámetros de la línea de comandos tienen prioridad sobre los parámetros del archivo de configuración.

Pausar y reanudar el escaneo (--resume)

Para escaneos muy largos (por ejemplo, escanear todo Internet o rangos muy grandes), Masscan tiene una función incorporada de pausa y reanudación. Si interrumpes Masscan (Ctrl+C), guardará automáticamente su estado en el archivo paused.conf (en el directorio actual).

Para reanudar el escaneo desde donde se interrumpió, simplemente usa la opción --resume:

sudo masscan --resume paused.conf

Masscan cargará el estado desde el archivo y continuará el escaneo. Asegúrate de que todos los demás parámetros (objetivos, puertos, velocidad, etc.) sean los mismos que en el inicio original, o usa el mismo archivo de configuración.

Fragmentación (división) del escaneo (--shards)

Si tienes varias máquinas o varias interfaces de red, puedes dividir la tarea de escaneo entre ellas para acelerar aún más el proceso. La opción --shards te permite especificar qué parte (fragmento) del volumen total de trabajo debe realizar esta instancia de Masscan.

Por ejemplo, para dividir el escaneo en dos partes:

En la máquina/interfaz 1:

sudo masscan [objetivos] -p[puertos] --rate [velocidad] --shards 1/2 -oG shard1_results.gnmap

En la máquina/interfaz 2:

sudo masscan [objetivos] -p[puertos] --rate [velocidad] --shards 2/2 -oG shard2_results.gnmap

Aquí 1/2 significa “primer fragmento de dos”, y 2/2 – “segundo fragmento de dos”. Masscan dividirá automáticamente el rango de objetivos y puertos para que cada instancia escanee su parte única. Después de finalizar, tendrás que combinar los archivos de resultados (shard1_results.gnmap y shard2_results.gnmap).

Resolución de problemas frecuentes

  • Error “permission denied” o “socket: Operation not permitted”: Masscan requiere permisos de root para trabajar con sockets sin procesar. Ejecuta el comando a través de sudo.
  • Velocidad baja o puertos omitidos:
    • Intenta reducir el valor de --rate.
    • Asegúrate de haber especificado explícitamente la interfaz de red correcta con -e o --adapter.
    • Comprueba la carga de la CPU y la red durante el escaneo (top, htop, iftop, nload). Si están al 100%, tu sistema no puede manejar la velocidad especificada.
    • Intenta aumentar el tiempo de espera con --wait.
    • En algunos sistemas (especialmente máquinas virtuales o con ciertos controladores), el rendimiento del stack de red puede estar limitado.
  • Masscan “se bloquea” o funciona muy lentamente:
    • Es posible que se haya especificado una velocidad demasiado alta para tu canal o sistema. Reduce --rate.
    • Comprueba si hay problemas de red (pérdida de paquetes).
    • Asegúrate de que el firewall de tu máquina no esté bloqueando los paquetes SYN salientes o los paquetes SYN-ACK/RST entrantes.
  • Avisos de “transmit timed out”: Esto puede indicar que el sistema operativo no puede enviar paquetes a la velocidad especificada. Reduce --rate.
  • No hay resultados (aunque los puertos estén abiertos):
    • Comprueba la corrección de la especificación de los objetivos y los puertos.
    • Asegúrate de que el firewall en el camino no esté bloqueando tus sondas o las respuestas a ellas.
    • Intenta reducir significativamente la velocidad (--rate 100) para una prueba.
    • Asegúrate de que estás usando la interfaz correcta (-e).

Consideraciones éticas y legalidad

Esta es una sección extremadamente importante. Masscan es una herramienta muy potente y, como cualquier herramienta potente, puede utilizarse para el bien o para el mal.

OBTÉN SIEMPRE PERMISO: Nunca escanees redes, sistemas o direcciones IP que no te pertenezcan o para las que no tengas un permiso explícito por escrito del propietario. El escaneo no autorizado de puertos en muchas jurisdicciones se considera ilegal y puede tener consecuencias graves, incluyendo responsabilidad legal y bloqueo de tu dirección IP.

TEN CUIDADO CON LA VELOCIDAD: Como hemos dicho muchas veces, la alta velocidad de escaneo de Masscan puede sobrecargar fácilmente las redes o hosts de destino, lo que puede considerarse un ataque DoS (Denial of Service), incluso si no tenías esa intención. Empieza con velocidades bajas y auméntalas gradualmente y conscientemente.

RESPETA LOS RECURSOS: Incluso si tienes permiso, evita el escaneo excesivamente agresivo, que puede interferir con el funcionamiento normal de los sistemas o la red de destino.

CONOCE LAS LEYES: Infórmate sobre la legislación de tu país y región en materia de seguridad informática y escaneo de redes. Lo que es legal en un lugar puede ser ilegal en otro.

ÚSALO DE FORMA RESPONSABLE: Utiliza Masscan para fines legítimos: auditoría de seguridad de tus propias redes, pruebas de penetración con permiso del cliente, investigación de redes (de nuevo, con permiso o en plataformas especialmente designadas para ello).

Recuerda: el desconocimiento de la ley no exime de responsabilidad. Tu reputación e incluso tu libertad pueden depender de lo responsable que seas al utilizar este tipo de herramientas.

Cita al respecto

Las herramientas en sí mismas no son buenas ni malas. Todo depende de cómo las uses. Un martillo se puede usar para construir una casa, o para romper una ventana. La responsabilidad recae en el usuario.

Conclusiones

¡Hemos recorrido un largo camino! Desde el primer contacto con Masscan hasta el análisis de sus características clave, sintaxis, ejemplos prácticos e incluso scripts. Resumamos lo que hemos aprendido:

  • Masscan es el rey de la velocidad en el mundo de los escáneres de puertos, gracias a su enfoque asincrónico (sin estado). Es ideal para el reconocimiento rápido de grandes redes.
  • Masscan no reemplaza a Nmap, sino que lo complementa. Masscan es para la anchura (encontrar rápidamente puertos abiertos en muchos hosts), Nmap es para la profundidad (análisis detallado de hosts concretos).
  • El parámetro --rate es clave. Debes controlar la velocidad conscientemente, equilibrando el rendimiento, la precisión y las consideraciones éticas/legales. Siempre debes empezar poco a poco.
  • Hemos analizado la sintaxis básica: cómo indicar objetivos (IP, redes, archivos), puertos (-p), seleccionar la interfaz (-e), controlar la velocidad (--rate) y guardar los resultados en diferentes formatos (-oX, -oG, -oJ, -oL).
  • Hemos examinado ejemplos prácticos para diferentes escenarios: desde escanear un solo host hasta grandes redes, el uso de exclusiones e intentar recopilar banners.
  • Hemos visto cómo Masscan se integra fácilmente en scripts (Bash) para automatizar tareas, incluyendo la popular combinación Masscan + Nmap.
  • Hemos abordado las posibilidades avanzadas, como los archivos de configuración, la reanudación del escaneo y la fragmentación.
  • Y, lo más importante, hemos destacado la importancia del uso ético y legal de esta potente herramienta. ¡Escanea solo aquello para lo que tienes derecho!

Ahora tienes en tus manos los conocimientos y la herramienta que puede acelerar significativamente tu trabajo de análisis e investigación de redes. Masscan no es solo un escáner, es una filosofía de cobertura rápida que puede ser increíblemente útil si se aplica correctamente.

Espero que este artículo te haya sido útil y claro. No tengas miedo de experimentar (¡dentro de límites seguros!), probar diferentes opciones y leer la documentación oficial (man masscan o en GitHub). Cuanto más practiques, más seguro te sentirás utilizando esta herramienta.

¡Que tengas buenos escaneos y redes seguras! Si tienes alguna pregunta o sugerencia, escribe en los comentarios.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda