Nmap Development mailing list archives
[NSE][patch]Structured XML output for scripts
From: Daniel Miller <bonsaiviking () gmail com>
Date: Sat, 25 Jun 2011 13:33:09 -0500
List, I'm so excited to finally submit this patch. It's a continuation of the idea started in http://seclists.org/nmap-dev/2011/q2/130, of providing structure for NSE script output so that it can be more meaningfully parsed from Nmap's XML output. The first patch I submitted was fatally flawed with memory corruption, as well as some poor design choices, but I'm really happy about this new patch. I've tested under valgrind while running every script I could, and I haven't introduced any memory leaks, the XML output validates under (my patched) nmap.dtd, and the plain output is identical (except for possible minor whitespace) to what was being output before, all without modifying the scripts themselves. That's an important note for script writers: you don't have to change anything to take advantage of this patch. My implementation modified stdnse.format_output() to take the exact same input, but instead of transforming it into a string (which is still valid to return from a script), it just validates the structure of the table and returns it. The NSE runtime takes any single value returned from a script (other than nil) and interprets its structure to output well-formed XML. There are a few table constructs that are not allowed, but anything that stdnse.format() used to take will make sense. Some scripts could be written to better take advantage of the new formatting, but I'll submit a patch later that does a lot of that. In the meantime, a script that, for instance, just returns a multiline string will have the expected behavior in normal output, and have the whole chunk of text shoved into a single <elem> in XML output. One difference that I forgot to document (though I'll send in some examples later), is that if you push a single-element dictionary-table into your output tab le, it will treat it as a key-value pair. So this: table.insert( output, { Label="some information" } ) Turns into this in normal output: | my-script: | Label: some information ... and into this in XML output: <elem key="Label">some information</elem> I'm really looking forward to hearing the feedback on this. Dan
Attachment:
nse_structured.patch
Description:
_______________________________________________ Sent through the nmap-dev mailing list http://cgi.insecure.org/mailman/listinfo/nmap-dev Archived at http://seclists.org/nmap-dev/
Current thread:
- [NSE][patch]Structured XML output for scripts Daniel Miller (Jun 25)
- Re: [NSE][patch]Structured XML output for scripts dave b (Jun 25)