Ir al contenido

Output, XML y comparación

Por

Madurezreviewed
Última revisión
Publicado
Última actualización

Un escaneo produce dos cosas diferentes. La vista interactiva ayuda a decidir mientras Nmap sigue trabajando. El artefacto estructurado permite demostrar después qué objetivos, estados, razones, servicios y scripts formaron parte de la ejecución. Si solo se conserva el scrollback, el resultado pierde estructura, contexto y, con frecuencia, las líneas que quedaron fuera de la terminal.

El XML es la fuente más útil para derivar inventarios y comparaciones. El formato normal conserva una lectura cercana a la sesión original. Guardar ambos evita elegir entre consulta humana y procesamiento reproducible.

Opción Formato Uso
-oN FILE normal lectura humana similar a terminal
-oX FILE XML parseo, importación y comparación
-oG FILE grepable compatibilidad con flujos antiguos
-oS FILE script kiddie formato visual, no operativo
-oA BASENAME normal, XML y grepable conjunto con basename común
Guardar una ejecución estructurada
sudo nmap -sS -sV -n -Pn -p PORT_LIST --reason \
-oA scans/20260728-1200-services TARGET_IP

El nombre incluye momento y tarea. Conserva además el comando, stderr, versión, origen y ruta en el registro de actividad. El XML indica muchos parámetros, pero no sustituye el contexto de red ni documenta una modificación interactiva realizada durante el escaneo.

El XML contiene hosts, direcciones, hostnames, puertos, estados, razones, servicios, scripts, tiempos y metadatos de ejecución. Un analizador debe tratarlo como una entrada no confiable. No uses expresiones regulares sobre el output pensado para lectura humana si la automatización debe resistir cambios de formato.

Nmap puede generar una referencia XSL. Para una vista HTML local:

Transformar XML con la hoja incluida
xsltproc -o report.html /usr/share/nmap/nmap.xsl scans/result.xml

La ruta cambia por plataforma. Usa la hoja distribuida con la instalación y no cargues una URL remota durante una revisión sensible.

ndiff compara XML y muestra hosts, estados, puertos y servicios que cambiaron:

Comparar dos observaciones
ndiff scans/before.xml scans/after.xml
Guardar la diferencia en XML
ndiff --xml scans/before.xml scans/after.xml > scans/change.xml

La diferencia no explica la causa. Verifica que ambos escaneos usaron objetivos, origen, técnicas, puertos, timing, privilegios y versión comparables. Un cambio de filtered a open puede proceder de una ACL, de pérdida o de una posición distinta.

Antes de interpretar un diff, clasifica sus cambios. Un puerto ausente porque la segunda ejecución no lo seleccionó es un problema de cobertura. Un servicio con otro banner puede reflejar un despliegue o un balanceador distinto. Un host sin tabla de puertos puede haber agotado --host-timeout. Cada caso requiere una repetición diferente.

--resume FILE.nmap intenta continuar un escaneo interrumpido desde output normal que contenga la línea de ejecución. No permite añadir opciones nuevas:

Reanudar una ejecución interrumpida
sudo nmap --resume scans/interrupted.nmap

Conserva el archivo sin editar. Si necesitas cambiar timing, puertos u origen, inicia otra ejecución y enlaza ambas en el registro. Si --resume rechaza el archivo, revisa que sea output normal de Nmap y que conserve la línea # Nmap ... as:. Un XML válido no es una entrada válida para esta opción.

El XML puede contener:

  • direcciones y hostnames
  • banners y versiones
  • argumentos y output NSE
  • direcciones MAC y fabricante
  • hora, rutas y origen indirecto
  • nombres de archivo

Guarda el original en el repositorio de evidencia y genera una copia saneada para compartir. Registra hash y relación entre ambos. No edites el original para «limpiarlo».

El saneamiento también necesita una prueba. Abre la copia como texto, busca el conjunto de identificadores retirados y vuelve a parsearla. Una sustitución que rompe XML elimina precisamente la estructura que debía conservarse.

Un XML bien formado puede representar un escaneo interrumpido. Revisa runstats, el estado de salida y los mensajes de stderr antes de utilizarlo como línea base. Si faltan hosts respecto a una ejecución anterior, compara primero la expresión de objetivos, los excludes, la resolución, los privilegios y la posición de red. ndiff muestra diferencias entre documentos, pero desconoce cuál de esas causas las produjo.

Cuando la salida normal y el XML parezcan discrepar, conserva ambos originales y comprueba la versión de Nmap y los scripts ejecutados. Un script puede ofrecer texto útil en la salida interactiva y campos estructurados diferentes en XML. La normalización debe conservar esa incertidumbre en vez de convertir la ausencia de un campo en ausencia del servicio.