Escaneo de puertos con Masscan

NmapBeginner
Practicar Ahora

Introducción

En esta práctica de laboratorio, aprenderás a utilizar Masscan, un escáner de puertos TCP de alto rendimiento, para realizar un reconocimiento de red eficiente. Obtendrás experiencia práctica instalando Masscan desde su código fuente, configurando los parámetros de escaneo, ejecutando escaneos en rangos de redes privadas y analizando los resultados obtenidos.

Al finalizar esta sesión, serás capaz de definir objetivos, ejecutar escaneos de alta velocidad, interpretar la salida para identificar puertos abiertos y exportar tus hallazgos a formatos comunes para la elaboración de informes y análisis posteriores.

Esta es una Práctica Guiada, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que esta es una práctica de nivel principiante con una tasa de finalización del 100%. Ha recibido una tasa de valoraciones positivas del 98% por parte de los alumnos.

Instalar Masscan desde el código fuente

En este primer paso, compilarás e instalarás Masscan. Masscan es un escáner de puertos increíblemente rápido, capaz de escanear toda la Internet en cuestión de minutos. Lo instalaremos desde su código fuente para asegurarnos de utilizar la versión más reciente. Las herramientas de compilación y librerías necesarias ya han sido preinstaladas en tu entorno.

Primero, asegúrate de estar en el directorio ~/project, que es el espacio de trabajo designado para esta práctica.

cd ~/project

A continuación, descarga el código fuente de Masscan desde su repositorio oficial en GitHub utilizando git.

git clone https://github.com/robertdavidgraham/masscan --depth 1

Este comando crea un nuevo directorio llamado masscan que contiene el código fuente. Accede a dicho directorio.

cd masscan

Ahora, compila el código fuente utilizando el comando make. Este comando lee el archivo Makefile en el directorio y genera el binario ejecutable.

make

Una vez finalizada la compilación, encontrarás el ejecutable masscan dentro del directorio bin. Puedes verificar que la compilación fue exitosa comprobando su versión.

./bin/masscan --version

Deberías ver una salida similar a esta:

Masscan version 1.3.9-integration ( https://github.com/robertdavidgraham/masscan )
Compiled on: Aug 29 2025 11:15:09
Compiler: gcc 11.4.0
OS: Linux
CPU: x86 (64 bits)
GIT version: unknown

Finalmente, para que el comando masscan esté disponible en todo el sistema, instálalo en una ubicación estándar como /usr/local/bin. El Makefile proporcionado incluye un objetivo de instalación (install) que se encarga de esto por ti.

sudo make install

Este comando copia el binario de masscan a /usr/local/bin/, que se encuentra en la ruta del sistema (PATH). Ahora puedes ejecutar Masscan desde cualquier directorio.

Verifica la instalación:

masscan --version

Si visualizas el número de versión, Masscan se ha instalado correctamente.

Definir un rango de objetivos

Antes de ejecutar un escaneo, debes definir qué direcciones IP deseas rastrear. Para esta demostración, nos enfocaremos en un pequeño subconjunto de rangos de direcciones IP privadas para garantizar una ejecución rápida. Escanear estos rangos internos limitados es una práctica segura y eficiente para fines de aprendizaje.

Crearemos un archivo para listar nuestros rangos de objetivos. Primero, asegúrate de estar en el directorio principal del proyecto.

cd ~/project

Ahora, utiliza el editor de texto nano para crear un archivo llamado targets.txt.

nano targets.txt

Dentro del editor nano, añade los siguientes rangos de IP pequeños para la demostración, cada uno en una línea nueva. Estos rangos están escritos en notación CIDR (Classless Inter-Domain Routing), que es una forma compacta de representar un bloque de direcciones IP.

192.168.1.0/24
172.17.0.0/24
10.0.0.0/24

Para guardar el archivo en nano, presiona Ctrl+O y luego Enter para confirmar el nombre del archivo. Para salir de nano, presiona Ctrl+X.

Después de guardar el archivo, puedes verificar su contenido con el comando cat.

cat targets.txt

La salida debería mostrar los tres rangos CIDR que acabas de introducir.

192.168.1.0/24
172.17.0.0/24
10.0.0.0/24

Este archivo servirá ahora como entrada para Masscan, indicándole qué redes debe escanear en el siguiente paso. Estos rangos pequeños (cada uno con solo 256 direcciones IP) permitirán que el escaneo se complete mucho más rápido, normalmente en menos de un minuto.

Ejecutar un escaneo de puertos de alta velocidad

Con Masscan instalado y tus objetivos definidos, estás listo para realizar un escaneo de puertos. En este paso, ejecutarás un escaneo de demostración en puertos comunes utilizando los rangos de IP reducidos que definimos, asegurando que el proceso sea rápido para facilitar el aprendizaje.

Asegúrate de estar en el directorio ~/project donde se encuentra tu archivo targets.txt.

cd ~/project

Ahora, ejecuta el siguiente comando de masscan. Este comando requiere sudo porque Masscan utiliza sockets sin procesar (raw sockets) para enviar paquetes, lo cual requiere privilegios elevados.

sudo masscan -p22,80,443,8080 -iL targets.txt --rate 1000 -oG scan_results.gnmap

Desglosemos las opciones del comando:

  • -p22,80,443,8080: Especifica los puertos comunes a escanear (SSH, HTTP, HTTPS y un puerto HTTP alternativo). Este enfoque selectivo garantiza una finalización más rápida.
  • -iL targets.txt: Indica a Masscan que lea los rangos de IP objetivos desde el archivo targets.txt.
  • --rate 1000: Establece la tasa de transmisión de paquetes en 1000 paquetes por segundo. Esta es una velocidad segura para un entorno de laboratorio.
  • -oG scan_results.gnmap: Guarda la salida en formato "grepable" en un archivo llamado scan_results.gnmap. Este formato es fácil de procesar con herramientas de línea de comandos.

Mientras el escaneo está en curso, Masscan mostrará su progreso. Con nuestros rangos de objetivos pequeños, el escaneo debería terminar en menos de un minuto.

Starting masscan 1.3.9-integration (http://bit.ly/14GZzcT) at 2025-08-29 03:20:16 GMT
Initiating SYN Stealth Scan
Scanning 768 hosts [4 ports/host]

Una vez que el escaneo se haya completado, aparecerá un nuevo archivo llamado scan_results.gnmap en tu directorio. Puedes ver su contenido con el comando cat.

cat scan_results.gnmap

La salida listará cualquier host encontrado con puertos abiertos. Dado que estamos escaneando rangos privados pequeños dentro de un entorno de contenedores, es posible que encuentres algunos puertos abiertos en la red de puente de Docker. Cualquier puerto abierto descubierto aparecerá en un formato similar a este:

## Masscan 1.3.9-integration scan initiated Fri Aug 29 03:20:16 2025
## Ports scanned: TCP(4;22-22,80-80,443-443,8080-8080) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Timestamp: 1756437619   Host: 172.17.0.1 ()     Ports: 22/open/tcp//ssh//
## Masscan done at Fri Aug 29 03:20:31 2025

Los resultados del escaneo muestran que analizamos 768 hosts en 4 puertos específicos (22, 80, 443, 8080) y completamos la tarea en unos 15 segundos. En este ejemplo, Masscan encontró un puerto abierto: SSH (puerto 22) en la puerta de enlace del puente de Docker en 172.17.0.1. Esto demuestra la capacidad de Masscan para descubrir rápidamente servicios abiertos en rangos de red.

Puntos clave sobre el formato de salida:

  • La marca de tiempo (Timestamp) indica cuándo se realizó cada descubrimiento.
  • El formato Host: IP () Ports: puerto/estado/protocolo//servicio// proporciona una identificación clara del servicio.
  • Masscan encontró el servicio SSH ejecutándose en el puente de Docker, lo cual es un hallazgo típico en entornos contenedorizados.

Revisar los puertos abiertos

Después de ejecutar un escaneo, el siguiente paso es analizar los resultados para identificar los puertos abiertos. El archivo scan_results.gnmap contiene toda la información, pero puede procesarse con otras herramientas para extraer los datos más relevantes.

Primero, asegúrate de estar en el directorio ~/project.

cd ~/project

El formato .gnmap está diseñado para ser analizado fácilmente. Para encontrar rápidamente todas las líneas que corresponden a puertos abiertos, puedes usar el comando grep.

grep "open" scan_results.gnmap

Este comando filtra el archivo y muestra solo las líneas que contienen la palabra "open". La salida se verá algo así, listando cada host y sus puertos abiertos.

Timestamp: 1756437619   Host: 172.17.0.1 ()     Ports: 22/open/tcp//ssh//

Para obtener un resumen rápido de qué puertos están abiertos con más frecuencia en las redes escaneadas, puedes crear una tubería de comandos. El siguiente comando extrae solo los números de puerto, los ordena y luego cuenta las ocurrencias únicas.

grep -oP '\d+/open' scan_results.gnmap | sort | uniq -c

Analicemos este potente comando de una sola línea:

  • grep -oP '\d+/open': Extrae solo las partes coincidentes (-o) de las líneas que encajan con la expresión regular compatible con Perl (-P), que busca dígitos seguidos de /open.
  • sort: Ordena la lista de puertos abiertos alfabéticamente, agrupando los puertos idénticos.
  • uniq -c: Colapsa las líneas idénticas adyacentes y antepone un recuento (-c) de cuántas veces ocurrió cada línea.

Un ejemplo de salida podría verse así, indicando que un host tiene el puerto 22 (SSH) abierto.

      1 22/open

Esta técnica es muy útil para obtener una visión general de alto nivel de los servicios expuestos en una red. En este caso, podemos ver que SSH es el único servicio descubierto en nuestro escaneo, lo cual es habitual en las redes de puente de Docker donde la puerta de enlace proporciona acceso SSH.

Exportar los resultados del escaneo

Para la elaboración de informes o el procesamiento posterior, a menudo es necesario exportar los resultados del escaneo a un formato más estructurado. En este paso, convertirás tus resultados en un archivo CSV (valores separados por comas), que se puede importar fácilmente en hojas de cálculo.

Asegúrate de estar en el directorio ~/project.

cd ~/project

Utilizaremos una combinación de grep y sed para analizar el archivo .gnmap y crear un archivo CSV limpio. sed es un potente editor de flujo que puede extraer y reformatear datos utilizando expresiones regulares.

Ejecuta el siguiente comando para crear scan_results.csv.

grep "open" scan_results.gnmap | sed 's/.*Host: \([^ ]*\) .*Ports: \([0-9]*\)\/open\/\([^/]*\).*/\1,\2,\3/' > scan_results.csv

Así es como funciona este comando:

  • grep "open" scan_results.gnmap: Primero, filtra las líneas con puertos abiertos.
  • sed 's/.*Host: \([^ ]*\) .*Ports: \([0-9]*\)\/open\/\([^/]*\).*/\1,\2,\3/': Utiliza una expresión regular para extraer la dirección IP, el número de puerto y el protocolo del formato de salida de Masscan y los formatea como CSV.
  • > scan_results.csv: Redirige la salida final a un nuevo archivo llamado scan_results.csv.

Ahora puedes ver tu archivo CSV recién creado.

cat scan_results.csv

La salida será una lista limpia de hosts y sus puertos abiertos, separados por comas.

172.17.0.1,22,tcp

Este formato estructurado es ideal para compartir con miembros del equipo, importar en bases de datos o utilizar como entrada para otras herramientas de seguridad. El formato CSV muestra la dirección IP, el número de puerto y el protocolo de una manera fácilmente legible.

Resumen

En esta práctica de laboratorio, has aprendido con éxito los fundamentos del uso de Masscan para el escaneo de redes a alta velocidad. Has practicado todo el flujo de trabajo, desde la instalación de la herramienta a partir del código fuente hasta el análisis y la exportación de los resultados.

Has adquirido experiencia práctica en:

  • Compilar e instalar software desde el código fuente en Linux.
  • Definir objetivos de escaneo utilizando la notación CIDR.
  • Ejecutar escaneos de puertos con parámetros específicos de puertos, velocidad y formato de salida.
  • Analizar los resultados del escaneo utilizando herramientas de línea de comandos como grep, sort y uniq.
  • Exportar datos a un formato CSV estructurado para la elaboración de informes.

Estas habilidades proporcionan una base sólida para realizar reconocimientos de red de manera rápida, eficiente y responsable.