pub fn parse_gnmap<R: Read>(reader: R) -> Result<NmapRun, String>Expand description
Parses Nmap greppable (-oG) output format into a structured format
ยงExamples
use std::io::Cursor;
use nmap::gnmap::parse_gnmap;
let gnmap_data = r#"# Nmap 7.92 scan initiated Mon Mar 10 10:11:59 2025 as: nmap -sS -p 80 example.com
Host: 192.168.1.1 () Status: Up
Host: 192.168.1.1 () Ports: 80/open/tcp//http//nginx/
let cursor = Cursor::new(gnmap_data);
let result = parse_gnmap(cursor);
assert!(result.is_ok());
let nmap_run = result.unwrap();
assert_eq!(nmap_run.hosts.len(), 1);
let host = &nmap_run.hosts[0];
assert_eq!(host.addresses[0].addr, "192.168.1.1");
assert_eq!(host.status.state, nmap::HostState::Up);
if let Some(ports) = &host.ports {
if let Some(port_list) = &ports.ports {
assert_eq!(port_list.len(), 1);
assert_eq!(port_list[0].port_id, 80);
assert_eq!(port_list[0].state.state, nmap::PortState::Open);
if let Some(service) = &port_list[0].service {
assert_eq!(service.name, "http");
assert_eq!(service.product, Some("nginx".to_string()));
}
}
}