Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
vmspect
vmspect es una biblioteca (crate) y herramienta CLI en Rust para la inspección estática ultra-rápida, análisis forense y extracción de información de imágenes de disco de máquinas virtuales (VMDK, RAW, QCOW2, VHD, VHDX, VDI, etc.).
Permite examinar la estructura de particiones (MBR/GPT), identificar el Sistema Operativo huésped (Windows/Linux), extraer listas completas de software instalado y detectar herramientas de integración (Guest Tools) de forma no invasiva (sin arrancar la máquina virtual ni requerir permisos de montaje en el host) en menos de 100 ms incluso para discos virtuales de más de 80 GiB.
🚀 Características Principales
- Rendimiento Extremo y Streaming Liviano (<100 ms para imágenes de 80 GiB):
- Parser nativo en Rust: Lectura directa y de latencia ultra-baja para imágenes
RAWyVMDK(monolithicSparse,monolithicFlat,twoGbMaxExtentFlat/Sparse, etc.) sin dependencias externas ni procesos secundarios. - Servidor
qemu-nbdintegrado: Para formatos complejos (QCOW2,VHDX,VDI, VMDK comprimidos/streamOptimized), conecta mediante socket TCP local (127.0.0.1) o sockets UNIX con el protocolo NBD estándar, con streaming directo de bloques y sin archivos temporales en disco.
- Parser nativo en Rust: Lectura directa y de latencia ultra-baja para imágenes
- Resiliencia ante Registros Sucios y Fallback NTFS (Graceful Degradation):
- Lectura permisiva del Registro de Windows: Tolerancia a colmenas de Registro sucias o dañadas (
SequenceNumberMismatchprovocado por apagados abruptos o snapshots en caliente) utilizandoHive::without_validationy aislamiento de panics internos concatch_unwind. - Inspección NTFS Fallback: En caso de colmenas de Registro totalmente inaccesibles,
vmspectdegrada elegantemente inspeccionando directamente el encabezado PE de\Windows\System32\ntoskrnl.exepara extraer compilación y versión del SO, y escanea\Program Filesmarcando las aplicaciones conorigen: Some("FallbackFS"). - Lista de Advertencias no fatales: Reporte de incidencias en el campo
advertenciasdel informe sin abortar el pipeline de inspección.
- Lectura permisiva del Registro de Windows: Tolerancia a colmenas de Registro sucias o dañadas (
- Detección Agnóstica Multi-Hipervisor de Guest Tools:
- Soporte completo y tipado en la estructura
HerramientasGuestpara identificar y extraer la versión de:- VMware Tools / open-vm-tools
- VirtualBox Guest Additions
- QEMU Guest Agent
- Hyper-V Integration Services
- Soporte completo y tipado en la estructura
- Sistemas Operativos Huésped Soportados:
- Windows (NTFS): Extrae las colmenas del Registro (
SOFTWAREySYSTEM) parseando llaves de desinstalación (32 y 64 bits), versión del sistema operativo, compilación (Build), Service Pack y Guest Tools. - Linux (ext2 / ext3 / ext4): Lee
/etc/os-release,/etc/hostnamey analiza la base de datos de paquetes/var/lib/dpkg/statusjunto con agentes de virtualización.
- Windows (NTFS): Extrae las colmenas del Registro (
- Detección de Esquemas y Sistemas de Archivos:
- Esquemas de particionado: MBR, GPT y Volúmenes sin tabla de particiones.
- Reconocimiento de firmas: NTFS, FAT12/16/32, ext2/3/4, XFS, Btrfs, LVM2 PV, Linux Swap.
- Extracción Agnóstica y Completa:
- Recolección completa por defecto de todas las aplicaciones e información del sistema sin filtros de ruido ni categorizaciones propietarias.
- Soporte de banderas
--noapps(desactiva recolección de aplicaciones) y--nosystem(desactiva recolección de metadatos del SO).
- Diseñado para UI y CLI:
- Emisión de eventos de progreso en porcentajes estructurados (
0%a100%) ideales para Tauri, egui o Electron. - Soporte de cancelación mediante tokens atómicos (
Arc<AtomicBool>/CancellationToken) preservando resultados parciales.
- Emisión de eventos de progreso en porcentajes estructurados (
📂 Estructura del Crate
El proyecto sigue la convención estándar de paquetes de biblioteca en Rust:
vmspect/
├── Cargo.toml # Configuración del crate, metadatos y dependencias
├── readme.md # Documentación principal
├── LICENSE # Licencia MIT / Apache-2.0
├── src/
│ ├── lib.rs # Punto de entrada de la librería (API pública y re-exports)
│ ├── models/ # Tipos de dominio (InformeInspeccion, VMInfo, Particion, etc.)
│ │ ├── image.rs
│ │ ├── options.rs # Opciones de inspección, progreso y cancelación
│ │ ├── partition.rs
│ │ ├── software.rs # Modelos de Programa y VMInfo
│ │ └── traits.rs # Traits abstractos (InspectorOS, VmDriver, MemoryMapper)
│ ├── parsers/ # Analizadores por sistema operativo
│ │ ├── mod.rs # Trait InspectorOS y fábrica polimórfica
│ │ ├── windows.rs # Extracción NTFS y parseo de Registro (nt-hive)
│ │ ├── linux.rs # Lectura de superbloque ext4 y base DPKG
│ │ └── desconocido.rs # Manejo de sistemas no reconocidos
│ └── vms/ # Capa de acceso a disco y virtualización
│ ├── mod.rs # Módulo de acceso a disco
│ ├── detector.rs # Detección de MBR/GPT y firmas de FS
│ ├── nbd.rs # Cliente NBD nativo y conector qemu-nbd
│ ├── stream.rs # Fachada LectorDisco y vista DiscoVirtual (Read + Seek)
│ └── vmdk.rs # Parser nativo de VMDK (sparse y descriptores)
├── tests/ # Tests de integración
│ └── integration_test.rs
└── examples/ # Ejemplos de uso listos para ejecutar
└── basic_inspection.rs
📦 Instalación
Añade vmspect a tu Cargo.toml:
[]
= "0.2.1"
💡 Ejemplos de Uso como Biblioteca
1. Inspección Completa con Guest Tools, Advertencias y Progreso
use Path;
use ;
2. Opciones Avanzadas de Extracción
use Opciones;
// Desactivar extracción de apps o sistema según necesidades de rendimiento:
let opciones_ligeras = Opciones ;
assert!;
assert!;
3. Procesamiento Concurrente y Preservación de Resultados ante Cancelación
ProcesadorConcurrente y MotorInspeccion ofrecen soporte de parada limpia (Graceful Shutdown) con garantía de preservación de resultados parciales. Cuando se activa el token de cancelación, los hilos de trabajo no aceptan nuevas imágenes, finalizan de manera segura el análisis en curso y devuelven todos los informes procesados con éxito:
use PathBuf;
use *;
4. Integración con Tauri / Runtimes Asíncronos
use Emitter;
use ;
async
🖥️ Uso desde Línea de Comandos (CLI)
vmspect incluye un binario de alto rendimiento para terminal:
# Inspección estándar con salida formateada para humanos:
# Salida estructurada en JSON (ideal para scripts, pipelines CI/CD y análisis forense):
# Escaneo concurrente y recursivo de un directorio completo de VMs:
# Inspección rápida omitiendo extracción de aplicaciones:
# Inspección omitiendo metadatos del SO:
🛠️ Ejecución de Pruebas y Ejemplos
Correr Tests Unitarios e Integrales:
Ejecutar Ejemplo con un Disco Real:
📄 Licencia
Este proyecto está licenciado bajo la Licencia MIT o Apache-2.0 a tu elección.