Portada de la guía para comparar escaneos nmap con ndiff.
Visualiza las diferencias entre escaneos de Nmap para una auditoría de red más eficiente y precisa.

Comparar Escaneos Nmap: Guía para Detectar Cambios con ndiff

Estás auditando una red. Lanzas un escaneo completo con Nmap hoy. La semana que viene, repites la operación. A simple vista, todo parece igual. Pero… ¿y si alguien levantó un servidor web en un puerto no estándar? ¿O si un servicio crítico dejó de responder? Revisar dos ficheros de texto gigantescos a ojo es una receta para el desastre.

Aquí es donde entra en juego una de las herramientas Nmap que muchos pasan por alto: ndiff.

ndiff es la herramienta oficial de la suite Nmap diseñada específicamente para una tarea: comparar escaneos Nmap y mostrarte únicamente las diferencias. Es el equivalente a un nmap diff o un diff de Git, pero para el mapeo de redes. En este artículo práctico, te enseñaremos a usar esta joya para llevar tu monitorización de red al siguiente nivel.

En breve: Para comparar escaneos de Nmap de forma efectiva usando ndiff, sigue estos pasos:

  1. Realiza tu primer escaneo Nmap guardando el resultado en formato XML (-oX scan1.xml).
  2. Ejecuta un segundo escaneo idéntico en otro momento (-oX scan2.xml).
  3. Usa el comando ndiff scan1.xml scan2.xml en la terminal.
  4. Analiza la salida: los elementos con + son nuevos, y los que tienen - han desaparecido.
Diagrama que muestra cómo comparar escaneos nmap con ndiff
Ndiff procesa dos escaneos para revelar únicamente los cambios cruciales en la red.

Paso 1: Preparando el Terreno con ndiff

Instalación (Que seguramente ya tienes)

ndiff se instala por defecto junto con Nmap. Para verificar que lo tienes en tu PATH, simplemente ejecuta:

# Verificar la presencia del comando ndiff
$ which ndiff
/usr/bin/ndiff

Si por alguna extraña razón no lo encuentras, una reinstalación de Nmap lo solucionará:

# Debian/Ubuntu
$ sudo apt install nmap

# CentOS/Fedora/RHEL
$ sudo dnf install nmap

En algunas distribuciones (especialmente Fedora/RHEL modernas), ndiff fue eliminado de los paquetes oficiales por depender de Python 2. Si no lo encuentras tras instalar nmap, la solución más fiable es compilar Nmap desde las fuentes oficiales (nmap.org). Así obtendrás ndiff y todas las utilidades actualizadas sin depender de los repositorios de la distro.

El Formato Clave: La Importancia del Nmap XML Output

ndiff no funciona con la salida de texto estándar de Nmap. Necesita un formato estructurado para hacer su magia, y ese formato es XML.

El primer paso es usar la funcionalidad de Nmap para guardar resultado en archivo. Para ello, ejecutamos el escaneo con el flag -oX para generar el formato XML:

# Escaneo 1: Guardamos la "foto" inicial de la red
nmap 192.168.56.0/24 -oX scan_lunes.xml

Ahora, simulemos un cambio. Para nuestro ejemplo, hemos encendido una nueva máquina virtual en el rango de red y hemos abierto un par de puertos en otra ya existente. Lanzamos el segundo escaneo:

# Escaneo 2: La "foto" de la red un día después
nmap 192.168.56.0/24 -oX scan_martes.xml

Importante: Para que la comparación sea fiable, ambos comandos de Nmap deben ser idénticos (mismos flags, mismos objetivos). Comparar un nmap -sV con un nmap -p- no tiene sentido y ndiff te mostrará un caos de diferencias.

Paso 2: Ejecutando la Comparación con ndiff

La sintaxis es tan simple como efectiva:

# Comparamos el escaneo del martes contra el del lunes
ndiff scan_lunes.xml scan_martes.xml

La salida es pura información, sin ruido:

-Nmap 7.93 scan initiated Fri Aug 29 15:05:01 2025 as: nmap -oX scan_lunes.xml 192.168.56.0/24
+Nmap 7.93 scan initiated Fri Aug 29 15:09:48 2025 as: nmap -oX scan_martes.xml 192.168.56.0/24

+192.168.56.11, 08:00:27:B4:57:6A:
+Host is up.
+Not shown: 988 closed ports
+PORT     STATE SERVICE
+PORT   STATE  SERVICE
+53/tcp   open   domain
+88/tcp   open   kerberos-sec
+135/tcp  open   msrpc
+139/tcp  open   netbios-ssn
+389/tcp  open   ldap
+445/tcp  open   microsoft-ds
+464/tcp  open   kpasswd5
+593/tcp  open   http-rpc-epmap
+636/tcp  open   ldapssl
+3389/tcp open   ms-wbt-server

 192.168.56.12, 08:00:27:E9:99:13:
-Not shown: 990 closed ports
+Not shown: 988 closed ports
 PORT     STATE SERVICE
+3268/tcp open  globalcatLDAP
+3269/tcp open  globalcatLDAPssl

Interpretando los Resultados (Traducción para Geeks)

La lógica es la misma que la de diff:

  • + (Signo Más): Esto es NUEVO. No estaba en el primer escaneo (scan_lunes.xml).
  • - (Signo Menos): Esto ha DESAPARECIDO. Estaba en el primer escaneo, pero ya no en el segundo.
  • Sin signo: Esto no ha cambiado, se muestra como contexto.

En nuestro ejemplo, ndiff nos grita dos cosas importantes:

  1. Ha aparecido un nuevo host: 192.168.56.11 está ahora en la red, con un montón de puertos abiertos. ¿Es un nuevo servidor legítimo o un dispositivo no autorizado? ¡A investigar!
  2. Un host existente ha cambiado: 192.168.56.12 ahora tiene los puertos 3268/tcp y 3269/tcp abiertos. ¿Se ha instalado un nuevo rol de Directorio Activo?

Paso 3: Cómo Automatizar el Escaneo Nmap para un Monitoreo Eficiente

La automatización se logra creando un script, por ejemplo en Bash, que ejecute los escaneos de Nmap periódicamente y use ndiff para comparar los resultados, enviando una alerta solo si se detectan cambios. Hacer esto a mano está bien, pero el verdadero poder reside en la automatización. ndiff puede exportar su salida a XML con el flag --xml, lo que lo hace perfecto para scripts.

En resumen, este script:

  • Define las rutas y la red a escanear.
  • Ejecuta un escaneo Nmap diario guardando el resultado.
  • Compara el escaneo de hoy con el de ayer usando ndiff.
  • Envía una alerta por correo solo si encuentra diferencias.
Flujo de trabajo para automatizar escaneo nmap y recibir alertas
Un script automatizado con cron y ndiff puede ser tu sistema de alerta temprana.

A continuación, presentamos un script para comparar escaneos nmap en bash que se ejecuta cada noche con cron:

#!/bin/bash

LOG_DIR="/var/log/nmap_scans"
NETWORK="192.168.1.0/24"
TODAY=$(date +"%Y-%m-%d")
YESTERDAY=$(date -d "yesterday" +"%Y-%m-%d")

SCAN_TODAY="$LOG_DIR/scan_$TODAY.xml"
SCAN_YESTERDAY="$LOG_DIR/scan_$YESTERDAY.xml"
DIFF_FILE="$LOG_DIR/diff_$TODAY.txt"

mkdir -p "$LOG_DIR"  

# Ejecutar el escaneo de hoy
nmap -T4 -F $NETWORK -oX $SCAN_TODAY

# Si existe el escaneo de ayer, comparar
if [ -f "$SCAN_YESTERDAY" ]; then
    ndiff "$SCAN_YESTERDAY" "$SCAN_TODAY" > "$DIFF_FILE"

    # Si el fichero de diferencias no está vacío, envía una alerta
    if [ -s "$DIFF_FILE" ]; then
    echo "Se detectaron cambios en la red. Adjunto el detalle de las diferencias." | mail -s "¡ALERTA! Cambios detectados en la red" -A "$DIFF_FILE" tuemail@dominio.com
else
    echo "Escaneo completado: no se detectaron cambios en la red." >> /var/log/nmap_scans/scan_log.txt
   fi
fi

Este simple script escanea la red diariamente y te envía un email solo si detecta cambios. Esto es monitorizar red con Nmap de forma reactiva, en su expresión más pura y simple.

Ventajas de Usar Ndiff para la Auditoría de Redes

Dejar de usar ndiff es como tener un superpoder y no saberlo. Aunque existen alternativas a Nmap para el escaneo de red, ndiff es una herramienta simple, robusta y ya integrada en Nmap que transforma tus escaneos de “fotos” estáticas a un sistema dinámico para detectar cambios en red.

Ya sea al usar Nmap para auditoría de seguridad, parte fundamental de las pruebas de penetración, para verificar que el equipo de sistemas no ha abierto puertos sin avisar, o para detectar dispositivos no autorizados, ndiff te da la respuesta al instante. Automatízalo, y tendrás un vigilante de red trabajando para ti 24/7.

Para un detalle exhaustivo de todos sus parámetros, consulta el manual oficial de ndiff.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda