summaryrefslogtreecommitdiffstats
path: root/docs/nmap.dtd
diff options
context:
space:
mode:
Diffstat (limited to 'docs/nmap.dtd')
-rw-r--r--docs/nmap.dtd362
1 files changed, 362 insertions, 0 deletions
diff --git a/docs/nmap.dtd b/docs/nmap.dtd
new file mode 100644
index 0000000..74e777d
--- /dev/null
+++ b/docs/nmap.dtd
@@ -0,0 +1,362 @@
+<!--
+ nmap.dtd
+ This is the DTD for Nmap's XML output (-oX) format.
+ $Id$
+
+ Originally written by:
+ William McVey <wam@cisco.com> <wam+nmap@wamber.net>
+
+ Now maintained by Fyodor <fyodor@nmap.org> as part of Nmap.
+
+ To validate using this file, simply add a DOCTYPE line similar to:
+ <!DOCTYPE nmaprun SYSTEM "nmap.dtd">
+ to the nmap output immediately below the prologue (the first line). This
+ should allow you to run a validating parser against the output (so long
+ as the DTD is in your parser's DTD search path).
+
+ Bugs:
+ Most of the elements are "locked" into the specific order that nmap
+ generates, when there really is no need for a specific ordering.
+ This is primarily because I don't know the xml DTD construct to
+ specify "one each of this list of elements, in any order". If there
+ is a construct similar to SGML's '&' operator, please let me know.
+
+ Portions Copyright (c) 2001-2022 Nmap Software LLC
+ Portions Copyright (c) 2001 by Cisco systems, Inc.
+
+ Permission to use, copy, modify, and distribute modified and
+ unmodified copies of this software for any purpose and without fee is
+ hereby granted, provided that (a) this copyright and permission notice
+ appear on all copies of the software and supporting documentation, (b)
+ the name of Cisco Systems, Inc. not be used in advertising or
+ publicity pertaining to distribution of the program without specific
+ prior permission, and (c) notice be given in supporting documentation
+ that use, modification, copying and distribution is by permission of
+ Cisco Systems, Inc.
+
+ Cisco Systems, Inc. makes no representations about the suitability
+ of this software for any purpose. THIS SOFTWARE IS PROVIDED ``AS
+ IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE.
+-->
+
+<!-- parameter entities to specify common "types" used elsewhere in the DTD -->
+<!ENTITY % attr_alpha "CDATA" >
+<!ENTITY % attr_numeric "CDATA" >
+<!ENTITY % attr_ipaddr "CDATA" >
+<!ENTITY % attr_percent "CDATA" >
+<!ENTITY % attr_type "(ipv4 | ipv6 | mac)" >
+<!ENTITY % attr_bool "(true | false)" >
+
+<!ENTITY % host_states "(up|down|unknown|skipped)" >
+
+<!-- see: nmap.c:statenum2str for list of port states -->
+<!-- Maybe they should be enumerated as in scan_types below , but I -->
+<!-- don't know how to escape states like open|filtered -->
+<!ENTITY % port_states "CDATA" >
+
+<!ENTITY % hostname_types "(user|PTR)" >
+
+<!-- see output.c:output_xml_scaninfo_records for scan types -->
+<!ENTITY % scan_types "(syn|ack|bounce|connect|null|xmas|window|maimon|fin|udp|sctpinit|sctpcookieecho|ipproto)" >
+
+<!-- <!ENTITY % ip_versions "(ipv4)" > -->
+
+<!ENTITY % port_protocols "(ip|tcp|udp|sctp)" >
+
+<!-- Service detection confidence level (portlist.h:struct serviceDeductions)
+-->
+<!ENTITY % service_confs "( 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10)" >
+
+<!-- This element was started in nmap.c:nmap_main().
+ It represents to the topmost element of the output document.
+-->
+<!ELEMENT nmaprun (scaninfo*, verbose, debugging,
+ ( target | taskbegin | taskprogress | taskend | hosthint |
+ prescript | postscript | host | output)*,
+ runstats) >
+<!ATTLIST nmaprun
+ scanner (nmap) #REQUIRED
+ args CDATA #IMPLIED
+ start %attr_numeric; #IMPLIED
+ startstr CDATA #IMPLIED
+ version CDATA #REQUIRED
+ profile_name CDATA #IMPLIED
+ xmloutputversion CDATA #REQUIRED
+>
+
+<!-- this element is written in output.c:doscaninfo() -->
+<!ELEMENT scaninfo EMPTY >
+<!ATTLIST scaninfo
+ type %scan_types; #REQUIRED
+ scanflags CDATA #IMPLIED
+ protocol %port_protocols; #REQUIRED
+ numservices %attr_numeric; #REQUIRED
+ services CDATA #REQUIRED
+>
+
+<!-- these elements are written in nmap.c:nmap_main() -->
+<!ELEMENT verbose EMPTY >
+<!ATTLIST verbose level %attr_numeric; #IMPLIED >
+
+
+<!ELEMENT debugging EMPTY >
+<!ATTLIST debugging level %attr_numeric; #IMPLIED >
+
+<!ELEMENT target EMPTY >
+<!ATTLIST target specification CDATA #REQUIRED
+ status (skipped) #IMPLIED
+ reason (invalid) #IMPLIED
+>
+
+<!-- this element is written in timing.c:beginOrEndTask() -->
+<!ELEMENT taskbegin EMPTY >
+<!ATTLIST taskbegin
+ task CDATA #REQUIRED
+ time %attr_numeric; #REQUIRED
+ extrainfo CDATA #IMPLIED
+>
+
+<!-- this element is written in timing.c:printStats() -->
+<!ELEMENT taskprogress EMPTY >
+<!ATTLIST taskprogress
+ task CDATA #REQUIRED
+ time %attr_numeric; #REQUIRED
+ percent %attr_percent; #REQUIRED
+ remaining %attr_numeric; #IMPLIED
+ etc %attr_numeric; #IMPLIED
+>
+
+<!-- this element is written in timing.c:beginOrEndTask() -->
+<!ELEMENT taskend EMPTY >
+<!ATTLIST taskend
+ task CDATA #REQUIRED
+ time %attr_numeric; #REQUIRED
+ extrainfo CDATA #IMPLIED
+>
+
+<!--
+ this element is started in nmap.c:nmap_main() and filled by
+ output.c:write_host_status(), output.c:printportoutput(), and
+ output.c:printosscanoutput()
+-->
+<!ELEMENT host ( status, address , (address | hostnames |
+ smurf | ports | os | distance | uptime |
+ tcpsequence | ipidsequence | tcptssequence |
+ hostscript | trace)*, times? ) >
+<!ATTLIST host
+ starttime %attr_numeric; #IMPLIED
+ endtime %attr_numeric; #IMPLIED
+ timedout %attr_bool; #IMPLIED
+ comment CDATA #IMPLIED
+>
+
+<!-- these elements are written by scan_engine.c:ultrascan_host_pspec_update() -->
+<!ELEMENT hosthint (status,address+,hostnames?) >
+
+<!-- these elements are written by output.c:write_xml_initial_hostinfo() -->
+<!ELEMENT status EMPTY >
+<!ATTLIST status state %host_states; #REQUIRED
+ reason CDATA #REQUIRED
+ reason_ttl CDATA #REQUIRED
+ >
+
+<!ELEMENT address EMPTY >
+<!ATTLIST address
+ addr %attr_ipaddr; #REQUIRED
+ addrtype %attr_type; "ipv4"
+ vendor CDATA #IMPLIED
+>
+
+<!ELEMENT hostnames (hostname)* >
+<!ELEMENT hostname EMPTY >
+<!ATTLIST hostname
+ name CDATA #IMPLIED
+ type %hostname_types; #IMPLIED
+>
+
+
+<!-- this element is written by output.c:write_host_status() -->
+<!ELEMENT smurf EMPTY >
+<!ATTLIST smurf responses %attr_numeric; #REQUIRED >
+
+<!-- these elements are written by output.c:printportoutput() -->
+
+<!ELEMENT ports (extraports* , port*) >
+
+<!ELEMENT extraports (extrareasons)* >
+<!ATTLIST extraports
+ state %port_states; #REQUIRED
+ count %attr_numeric; #REQUIRED
+>
+
+<!ELEMENT extrareasons EMPTY >
+<!ATTLIST extrareasons
+ reason CDATA #REQUIRED
+ count CDATA #REQUIRED
+ proto %port_protocols; #IMPLIED
+ ports CDATA #IMPLIED
+>
+
+<!ELEMENT port (state , owner? , service?, script*) >
+<!ATTLIST port
+ protocol %port_protocols; #REQUIRED
+ portid %attr_numeric; #REQUIRED
+>
+
+<!ELEMENT state EMPTY >
+<!ATTLIST state
+ state %port_states; #REQUIRED
+ reason CDATA #REQUIRED
+ reason_ttl CDATA #REQUIRED
+ reason_ip CDATA #IMPLIED
+>
+
+<!ELEMENT owner EMPTY >
+<!ATTLIST owner name CDATA #REQUIRED >
+
+<!ELEMENT service (cpe*) >
+<!ATTLIST service
+ name CDATA #REQUIRED
+ conf %service_confs; #REQUIRED
+ method (table|probed) #REQUIRED
+ version CDATA #IMPLIED
+ product CDATA #IMPLIED
+ extrainfo CDATA #IMPLIED
+ tunnel (ssl) #IMPLIED
+ proto (rpc) #IMPLIED
+ rpcnum %attr_numeric; #IMPLIED
+ lowver %attr_numeric; #IMPLIED
+ highver %attr_numeric; #IMPLIED
+ hostname CDATA #IMPLIED
+ ostype CDATA #IMPLIED
+ devicetype CDATA #IMPLIED
+ servicefp CDATA #IMPLIED
+>
+
+<!ELEMENT cpe (#PCDATA)>
+
+<!ELEMENT script (#PCDATA|table|elem)* >
+<!ATTLIST script
+ id CDATA #REQUIRED
+ output CDATA #REQUIRED
+>
+
+<!ELEMENT table (table|elem)* >
+<!ATTLIST table
+ key CDATA #IMPLIED
+>
+
+<!ELEMENT elem (#PCDATA)>
+<!ATTLIST elem
+ key CDATA #IMPLIED
+>
+
+<!ELEMENT os ( portused* , osmatch*, osfingerprint* ) >
+
+<!ELEMENT portused EMPTY >
+<!ATTLIST portused
+ state %port_states; #REQUIRED
+ proto %port_protocols; #REQUIRED
+ portid %attr_numeric; #REQUIRED
+>
+<!ELEMENT osclass (cpe*) >
+<!ATTLIST osclass
+ vendor CDATA #REQUIRED
+ osgen CDATA #IMPLIED
+ type CDATA #IMPLIED
+ accuracy CDATA #REQUIRED
+ osfamily CDATA #REQUIRED
+>
+
+
+<!ELEMENT osmatch (osclass*) >
+<!ATTLIST osmatch
+ name CDATA #REQUIRED
+ accuracy %attr_numeric; #REQUIRED
+ line %attr_numeric; #REQUIRED
+>
+
+<!ELEMENT osfingerprint EMPTY >
+<!ATTLIST osfingerprint
+ fingerprint CDATA #REQUIRED
+>
+
+<!ELEMENT distance EMPTY >
+<!ATTLIST distance
+ value %attr_numeric; #REQUIRED
+>
+
+<!ELEMENT uptime EMPTY >
+<!ATTLIST uptime
+ seconds %attr_numeric; #REQUIRED
+ lastboot CDATA #IMPLIED
+>
+
+<!ELEMENT tcpsequence EMPTY >
+<!ATTLIST tcpsequence
+ index %attr_numeric; #REQUIRED
+ difficulty CDATA #REQUIRED
+ values CDATA #REQUIRED
+>
+
+<!ELEMENT ipidsequence EMPTY >
+<!ATTLIST ipidsequence
+ class CDATA #REQUIRED
+ values CDATA #REQUIRED
+>
+
+<!ELEMENT tcptssequence EMPTY >
+<!ATTLIST tcptssequence
+ class CDATA #REQUIRED
+ values CDATA #IMPLIED
+>
+
+<!ELEMENT trace (hop*) >
+<!ATTLIST trace
+ proto CDATA #IMPLIED
+ port CDATA #IMPLIED
+>
+
+<!ELEMENT hop EMPTY>
+<!ATTLIST hop
+ ttl CDATA #REQUIRED
+ rtt CDATA #IMPLIED
+ ipaddr CDATA #IMPLIED
+ host CDATA #IMPLIED
+>
+
+<!ELEMENT times EMPTY>
+<!ATTLIST times
+ srtt CDATA #REQUIRED
+ rttvar CDATA #REQUIRED
+ to CDATA #REQUIRED
+>
+
+<!-- For embedding another type of output (screen output) like Zenmap does. -->
+<!ELEMENT output (#PCDATA)>
+<!ATTLIST output type (interactive) #IMPLIED>
+
+<!-- these elements are generated in output.c:printfinaloutput() -->
+<!ELEMENT runstats (finished, hosts)>
+
+<!ELEMENT finished EMPTY >
+<!ATTLIST finished time %attr_numeric; #REQUIRED
+ timestr CDATA #IMPLIED
+ elapsed %attr_numeric; #REQUIRED
+ summary CDATA #IMPLIED
+ exit (error|success) #IMPLIED
+ errormsg CDATA #IMPLIED
+>
+
+<!ELEMENT hosts EMPTY >
+<!ATTLIST hosts
+ up %attr_numeric; "0"
+ down %attr_numeric; "0"
+ total %attr_numeric; #REQUIRED
+>
+
+<!ELEMENT hostscript ( script+ )>
+<!ELEMENT prescript ( script+ )>
+<!ELEMENT postscript ( script+ )>