@@ -66,43 +66,111 @@ public String taskStatus(RestRequestBody body) throws JAXBException, SAXExceptio
6666 public ReportXml getReport (RestRequestBody body ) throws JAXBException , SAXException , IOException , ParserConfigurationException {
6767 return getReportResponse (body .getUser (), body .getParams ());
6868 }
69-
7069
71- private ReportXml getReportResponse (User user , HashMap <String , String > params ) throws JAXBException , SAXException , IOException , ParserConfigurationException {
72- ProcessBuilder pb = new ProcessBuilder ("bash" , "-c" , buildCommandPrefix (user ) + "'" +xob .buildGetReport (user , params )+"'" );
70+
71+ /**
72+ * Version 11
73+ */
74+ private List <Vuln > loadVulns (User user , HashMap <String , String > params , int start , List <Vuln > vulns ) throws JAXBException , SAXException , IOException , ParserConfigurationException {
75+ ProcessBuilder pb = new ProcessBuilder ("bash" , "-c" , "gvm-cli --timeout 600 socket --socketpath " + socket + " --xml '" + xob .buildGetResult (user , params , start ) + "'" );
7376 String output = IOUtils .toString (pb .start ().getInputStream ());
7477 Document doc = DocumentBuilderFactory .newInstance ()
75- .newDocumentBuilder ()
76- .parse (new InputSource (new StringReader (output )));
77- Element reportNodeResponse = (Element ) doc .getElementsByTagName ("get_reports_response" ).item (0 );
78- Element reportNode = (Element ) reportNodeResponse .getElementsByTagName ("report" ).item (0 );
79- Element reportNode2 = (Element ) reportNode .getElementsByTagName ("report" ).item (0 );
80- Element results = (Element ) reportNode2 .getElementsByTagName ("results" ).item (0 );
78+ .newDocumentBuilder ()
79+ .parse (new InputSource (new StringReader (output )));
80+ Element results = (Element ) doc .getElementsByTagName ("get_results_response" ).item (0 );
81+ Element count = (Element ) doc .getElementsByTagName ("result_count" ).item (0 );
82+ int resultsCount = Integer .parseInt (count .getElementsByTagName ("filtered" ).item (0 ).getTextContent ());
83+ log .info ("Loading vulns for page {} and reportid: {}, result count {}" , start , params .get (ConstantStrings .REPORT_ID ), resultsCount );
84+
8185 NodeList vulnNode = results .getElementsByTagName ("result" );
82- List <Vuln > vulns = new ArrayList <>();
83-
8486 if (vulnNode != null ) {
85- int length = vulnNode .getLength ();
86- for (int i = 0 ; i < length ; i ++) {
87- if (vulnNode .item (i ).getNodeType () == Node .ELEMENT_NODE ) {
88- Element el = (Element ) vulnNode .item (i );
89- try {
90- Vuln v = new Vuln ();
91- v .setName (el .getElementsByTagName ("name" ).item (0 ).getTextContent ());
92- v .setHost (el .getElementsByTagName ("host" ).item (0 ).getFirstChild ().getTextContent ());
93- v .setDesc (el .getElementsByTagName ("description" ).item (0 ).getTextContent ());
94- v .setPort (el .getElementsByTagName ("port" ).item (0 ).getTextContent ());
95- v .setThreat (el .getElementsByTagName ("threat" ).item (0 ).getTextContent ());
96- vulns .add (v );
97- } catch (NullPointerException n ) {
98- log .warn ("Something is wrong with one of the results, nullpoitner returned" );
99- }
100- }
101- }
102- }
103-
87+ int length = vulnNode .getLength ();
88+ for (int i = 0 ; i < length ; i ++) {
89+ if (vulnNode .item (i ).getNodeType () == Node .ELEMENT_NODE ) {
90+ Element el = (Element ) vulnNode .item (i );
91+ try {
92+ Vuln v = new Vuln ();
93+ v .setName (el .getElementsByTagName ("name" ).item (0 ).getTextContent ());
94+ v .setHost (el .getElementsByTagName ("host" ).item (0 ).getFirstChild ().getTextContent ());
95+ v .setDesc (el .getElementsByTagName ("description" ).item (0 ).getTextContent ());
96+ v .setPort (el .getElementsByTagName ("port" ).item (0 ).getTextContent ());
97+ v .setThreat (getThreat (el .getElementsByTagName ("severity" ).item (0 ).getTextContent ()));
98+ vulns .add (v );
99+ } catch (NullPointerException n ) {
100+ //n.printStackTrace();
101+ log .info ("Something is wrong with one of the results, nullpoitner returned" );
102+ }
103+ }
104+ }
105+ }
106+ log .info ("Vunlns contains {} records" , vulns .size ());
107+ if (((start * 1000 ) + 1000 ) < resultsCount ){
108+ start ++;
109+ vulns .addAll (loadVulns (user , params ,start , vulns ));
110+ }
111+
112+ return vulns ;
113+ }
114+
115+ private String getThreat (String severity ) {
116+ double sev = Double .parseDouble (severity );
117+ if (sev == 0.0 ){
118+ return "Info" ;
119+ } else if (sev <=4.0 ){
120+ return "Low" ;
121+ } else if (sev <=6.0 ) {
122+ return "Medium" ;
123+ } else if (sev <=8.0 ){
124+ return "High" ;
125+ } else {
126+ return "Critical" ;
127+ }
128+ }
129+
130+ /**
131+ * Version 9
132+ */
133+
134+ private ReportXml getReportResponse (User user , HashMap <String , String > params ) throws JAXBException , SAXException , IOException , ParserConfigurationException {
135+ List <Vuln > vulns = new ArrayList <>();
136+ try {
137+ ProcessBuilder pb = new ProcessBuilder ("bash" , "-c" , "gvm-cli --timeout 600 socket --socketpath " + socket + " --xml '" + xob .buildGetReport (user , params ) + "'" );
138+ String output = IOUtils .toString (pb .start ().getInputStream ());
139+ Document doc = DocumentBuilderFactory .newInstance ()
140+ .newDocumentBuilder ()
141+ .parse (new InputSource (new StringReader (output )));
142+ Element reportNodeResponse = (Element ) doc .getElementsByTagName ("get_reports_response" ).item (0 );
143+ Element reportNode = (Element ) reportNodeResponse .getElementsByTagName ("report" ).item (0 );
144+ Element reportNode2 = (Element ) reportNode .getElementsByTagName ("report" ).item (0 );
145+ Element results = (Element ) reportNode2 .getElementsByTagName ("results" ).item (0 );
146+ NodeList vulnNode = results .getElementsByTagName ("result" );
147+
148+
149+ if (vulnNode != null ) {
150+ int length = vulnNode .getLength ();
151+ for (int i = 0 ; i < length ; i ++) {
152+ if (vulnNode .item (i ).getNodeType () == Node .ELEMENT_NODE ) {
153+ Element el = (Element ) vulnNode .item (i );
154+ try {
155+ Vuln v = new Vuln ();
156+ v .setName (el .getElementsByTagName ("name" ).item (0 ).getTextContent ());
157+ v .setHost (el .getElementsByTagName ("host" ).item (0 ).getFirstChild ().getTextContent ());
158+ v .setDesc (el .getElementsByTagName ("description" ).item (0 ).getTextContent ());
159+ v .setPort (el .getElementsByTagName ("port" ).item (0 ).getTextContent ());
160+ v .setThreat (el .getElementsByTagName ("threat" ).item (0 ).getTextContent ());
161+ vulns .add (v );
162+ } catch (NullPointerException n ) {
163+ log .warn ("Something is wrong with one of the results, nullpoitner returned" );
164+ }
165+ }
166+ }
167+ }
168+ } catch (NullPointerException e ){
169+ log .warn ("No results" );
170+ }
104171 return new ReportXml (vulns );
105172 }
173+
106174 private String getTaskStatusResponse (User user , HashMap <String , String > params ) throws JAXBException , SAXException , IOException , ParserConfigurationException {
107175 ProcessBuilder pb = new ProcessBuilder ("bash" , "-c" , buildCommandPrefix (user ) + "'" +xob .buildGetTask (user , params )+"'" );
108176 String output = IOUtils .toString (pb .start ().getInputStream ());
0 commit comments