Output, XML y comparació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.
Formatos
Sección titulada «Formatos»| 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 |
sudo nmap -sS -sV -n -Pn -p PORT_LIST --reason \ -oA scans/20260728-1200-services TARGET_IPEl 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.
XML como fuente derivada
Sección titulada «XML como fuente derivada»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:
xsltproc -o report.html /usr/share/nmap/nmap.xsl scans/result.xmlLa ruta cambia por plataforma. Usa la hoja distribuida con la instalación y no cargues una URL remota durante una revisión sensible.
Comparar con ndiff
Sección titulada «Comparar con ndiff»ndiff compara XML y muestra hosts, estados, puertos y servicios que cambiaron:
ndiff scans/before.xml scans/after.xmlndiff --xml scans/before.xml scans/after.xml > scans/change.xmlLa 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.
Reanudar
Sección titulada «Reanudar»--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:
sudo nmap --resume scans/interrupted.nmapConserva 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.
Saneamiento
Sección titulada «Saneamiento»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.
Diagnosticar una salida incompleta
Sección titulada «Diagnosticar una salida incompleta»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.