15#include "../http/httputils.h"
16#include "../http_scanner/http_scanner.h"
19#include <cjson/cJSON.h>
20#include <netinet/in.h>
30#define G_LOG_DOMAIN "libgvm ovd"
32#define RESP_CODE_ERR -1
75 http_scanner_resp_t response = NULL;
77 path = g_string_new (
"/vts?information=1");
78 response = http_scanner_init_request_multi (conn, path->str);
80 g_string_free (path, TRUE);
99 return http_scanner_process_request_multi (conn, 5000);
114 http_scanner_resp_t response = NULL;
116 path = g_string_new (
"/vts?information=1");
118 http_scanner_send_request (conn, HTTP_SCANNER_GET, path->str, NULL, NULL);
120 g_string_free (path, TRUE);
123 response->body = g_strdup (http_scanner_stream_str (conn));
125 http_scanner_reset_stream (conn);
141 http_scanner_resp_t response;
148 || opts.
start > now || opts.
end < 0 || opts.
end > now)
150 response = g_malloc0 (
sizeof (
struct http_scanner_response));
153 g_strdup (
"{\"error\": \"Couldn't send get_performance command "
154 "to scanner. Bad or missing parameters.\"}");
158 query = g_strdup_printf (
"/health/performance?start=%d&end=%d&titles=%s",
161 http_scanner_send_request (conn, HTTP_SCANNER_GET, query, NULL, NULL);
165 response->body = g_strdup (http_scanner_stream_str (conn));
168 response->body = g_strdup (
169 "{\"error\": \"Not possible to get performance information.\"}");
170 g_warning (
"%s: Not possible to get performance information", __func__);
173 http_scanner_reset_stream (conn);
190 gchar **graph, gchar **err)
192 http_scanner_resp_t resp = NULL;
199 parser = cJSON_Parse (resp->body);
202 *err = g_strdup (
"Unable to parse sensor performance data");
205 else if (resp->code != 200)
207 parser = cJSON_Parse (resp->body);
208 item = cJSON_GetObjectItem (parser,
"error");
210 *err = g_strdup (cJSON_GetStringValue (item));
215 item = cJSON_GetArrayItem (parser, 0);
217 *graph = g_strdup (cJSON_GetStringValue (item));
220 http_scanner_response_cleanup (resp);
221 cJSON_Delete (parser);
239 cJSON *port = cJSON_CreateObject ();
240 if (ports->
type == 1)
241 cJSON_AddStringToObject (port,
"protocol",
"udp");
243 cJSON_AddStringToObject (port,
"protocol",
"tcp");
245 cJSON *ranges_array = cJSON_CreateArray ();
246 cJSON *range_obj = cJSON_CreateObject ();
247 cJSON_AddNumberToObject (range_obj,
"start", ports->
start);
249 if (ports->
end > ports->
start && ports->
end < 65535)
250 cJSON_AddNumberToObject (range_obj,
"end", ports->
end);
252 cJSON_AddNumberToObject (range_obj,
"end", ports->
start);
253 cJSON_AddItemToArray (ranges_array, range_obj);
254 cJSON_AddItemToObject (port,
"range", ranges_array);
255 cJSON_AddItemToArray ((cJSON *) p_array, port);
269 if (!key || !value || !json_obj)
271 cJSON_AddStringToObject ((cJSON *) json_obj, key, value);
283 cJSON *cred_obj = NULL;
291 cred_obj = cJSON_CreateObject ();
292 cJSON_AddStringToObject (cred_obj,
"service", service ? service :
"");
296 cJSON_AddNumberToObject (cred_obj,
"port", atoi (port));
299 cJSON *cred_type_obj = cJSON_CreateObject ();
302 cJSON_AddItemToObject (cred_obj, type ? type :
"", cred_type_obj);
304 cJSON_AddItemToArray ((cJSON *) cred_array, cred_obj);
316 gpointer scan_prefs_array)
318 cJSON *pref_obj = cJSON_CreateObject ();
319 cJSON_AddStringToObject (pref_obj,
"id", key);
320 cJSON_AddStringToObject (pref_obj,
"value", val);
321 cJSON_AddItemToArray (scan_prefs_array, pref_obj);
333 GHashTableIter vt_data_iter;
334 gchar *vt_param_id, *vt_param_value;
338 cJSON *vt_obj = cJSON_CreateObject ();
340 cJSON_AddStringToObject (vt_obj,
"oid", vt->
vt_id);
344 cJSON *params_array = cJSON_CreateArray ();
346 g_hash_table_iter_init (&vt_data_iter, vt->
vt_values);
347 while (g_hash_table_iter_next (&vt_data_iter, (gpointer *) &vt_param_id,
348 (gpointer *) &vt_param_value))
350 cJSON *param_obj = cJSON_CreateObject ();
351 cJSON_AddNumberToObject (param_obj,
"id", atoi (vt_param_id));
352 cJSON_AddStringToObject (param_obj,
"value", vt_param_value);
353 cJSON_AddItemToArray (params_array, param_obj);
355 cJSON_AddItemToObject (vt_obj,
"parameters", params_array);
357 cJSON_AddItemToArray (vts_array, vt_obj);
374 GHashTable *scan_preferences, GSList *vts)
376 cJSON *scan_obj = NULL;
377 cJSON *target_obj = NULL;
378 cJSON *hosts_array = NULL;
379 cJSON *exclude_hosts_array = NULL;
380 cJSON *finished_hosts_array = NULL;
381 gchar *json_str = NULL;
384 scan_obj = cJSON_CreateObject ();
387 cJSON_AddStringToObject (scan_obj,
"scan_id", target->
scan_id);
390 target_obj = cJSON_CreateObject ();
393 hosts_array = cJSON_CreateArray ();
394 gchar **hosts_list = g_strsplit (target->
hosts,
",", 0);
395 for (
int i = 0; hosts_list[i] != NULL; i++)
397 cJSON *host_item = NULL;
398 host_item = cJSON_CreateString (hosts_list[i]);
399 cJSON_AddItemToArray (hosts_array, host_item);
401 g_strfreev (hosts_list);
402 cJSON_AddItemToObject (target_obj,
"hosts", hosts_array);
407 exclude_hosts_array = cJSON_CreateArray ();
408 gchar **exclude_hosts_list = g_strsplit (target->
exclude_hosts,
",", 0);
409 for (
int i = 0; exclude_hosts_list[i] != NULL; i++)
411 cJSON *exclude_host_item = NULL;
412 exclude_host_item = cJSON_CreateString (exclude_hosts_list[i]);
413 cJSON_AddItemToArray (exclude_hosts_array, exclude_host_item);
415 g_strfreev (exclude_hosts_list);
416 cJSON_AddItemToObject (target_obj,
"excluded_hosts", exclude_hosts_array);
422 finished_hosts_array = cJSON_CreateArray ();
423 gchar **finished_hosts_list = g_strsplit (target->
finished_hosts,
",", 0);
424 for (
int i = 0; finished_hosts_list[i] != NULL; i++)
426 cJSON *finished_host_item = NULL;
427 finished_host_item = cJSON_CreateString (finished_hosts_list[i]);
428 cJSON_AddItemToArray (finished_hosts_array, finished_host_item);
430 g_strfreev (hosts_list);
431 cJSON_AddItemToObject (target_obj,
"finished_hosts",
432 finished_hosts_array);
436 if (target->
ports && target->
ports[0] !=
'\0')
438 cJSON *ports_array = cJSON_CreateArray ();
442 cJSON_AddItemToObject (target_obj,
"ports", ports_array);
446 cJSON *credentials = cJSON_CreateArray ();
449 cJSON_AddItemToObject (target_obj,
"credentials", credentials);
453 cJSON_AddBoolToObject (target_obj,
"reverse_lookup_unify", 1);
455 cJSON_AddBoolToObject (target_obj,
"reverse_lookup_unify", 0);
458 cJSON_AddBoolToObject (target_obj,
"reverse_lookup_only", 1);
460 cJSON_AddBoolToObject (target_obj,
"reverse_lookup_only", 0);
463 cJSON *alive_test_methods = cJSON_CreateArray ();
465 cJSON_AddItemToArray (alive_test_methods, cJSON_CreateString (
"arp"));
467 cJSON_AddItemToArray (alive_test_methods, cJSON_CreateString (
"tcp_ack"));
469 cJSON_AddItemToArray (alive_test_methods, cJSON_CreateString (
"tcp_syn"));
471 cJSON_AddItemToArray (alive_test_methods,
472 cJSON_CreateString (
"consider_alive"));
474 cJSON_AddItemToArray (alive_test_methods, cJSON_CreateString (
"icmp"));
475 cJSON_AddItemToObject (target_obj,
"alive_test_methods", alive_test_methods);
477 cJSON_AddItemToObject (scan_obj,
"target", target_obj);
480 cJSON *scan_prefs_array = cJSON_CreateArray ();
483 cJSON_AddItemToObject (scan_obj,
"scan_preferences", scan_prefs_array);
486 cJSON *vts_array = cJSON_CreateArray ();
488 cJSON_AddItemToObject (scan_obj,
"vts", vts_array);
490 json_str = cJSON_Print (scan_obj);
491 cJSON_Delete (scan_obj);
492 if (json_str == NULL)
493 g_warning (
"%s: Error while creating JSON.", __func__);
512 const gchar *ports,
const gchar *exclude_hosts,
513 int reverse_lookup_unify,
int reverse_lookup_only)
518 if (scanid && *scanid)
519 new_target->
scan_id = g_strdup (scanid);
521 new_target->
exclude_hosts = exclude_hosts ? g_strdup (exclude_hosts) : NULL;
523 new_target->
hosts = hosts ? g_strdup (hosts) : NULL;
524 new_target->
ports = ports ? g_strdup (ports) : NULL;
526 reverse_lookup_unify ? reverse_lookup_unify : 0;
528 reverse_lookup_only ? reverse_lookup_only : 0;
541 const gchar *finished_hosts)
544 target->
finished_hosts = finished_hosts ? g_strdup (finished_hosts) : NULL;
563 g_free (target->
hosts);
564 g_free (target->
ports);
581 gboolean icmp, gboolean tcp_syn,
582 gboolean tcp_ack, gboolean arp,
583 gboolean consider_alive)
605 if (!target || !credential)
624 new_vt_single->
vt_id = vt_id ? g_strdup (vt_id) : NULL;
626 g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
628 return new_vt_single;
642 g_hash_table_destroy (vt_single->
vt_values);
644 g_free (vt_single->
vt_id);
659 const gchar *name,
const gchar *value)
661 g_hash_table_replace (vt_single->
vt_values, g_strdup (name),
void array_free(GPtrArray *array)
Free global array value.
Definition array.c:50
GPtrArray array_t
Definition array.h:16
const gchar * scan_credential_get_port(scan_credential_t *credential)
Get the port of a scan credential.
Definition credentialutils.c:93
void scan_credential_free(scan_credential_t *credential)
Free a scan credential.
Definition credentialutils.c:134
const gchar * scan_credential_get_type(scan_credential_t *credential)
Get the type of a scan credential.
Definition credentialutils.c:63
void scan_credential_foreach_auth_data(scan_credential_t *credential, void(*func)(const char *name, const char *value, void *user_data), void *user_data)
Iterate over each authentication data item in a scan credential.
Definition credentialutils.c:109
const gchar * scan_credential_get_service(scan_credential_t *credential)
Get the service of a scan credential.
Definition credentialutils.c:78
struct scan_credential scan_credential_t
Definition credentialutils.h:16
array_t * port_range_ranges(const char *port_range)
Create a range array from a port_range string.
Definition networking.c:601
GVM Networking related API.
struct range range_t
Definition networking.h:43
#define RESP_CODE_ERR
Definition openvasd.c:32
int openvasd_parsed_performance(http_scanner_connector_t conn, openvasd_get_performance_opts_t opts, gchar **graph, gchar **err)
Parse performance data.
Definition openvasd.c:188
void openvasd_target_free(openvasd_target_t *target)
Free an openvasd target, including all added credentials.
Definition openvasd.c:553
http_scanner_resp_t openvasd_get_vts(http_scanner_connector_t conn)
Get VT's metadata.
Definition openvasd.c:111
static void add_auth_data_key_value_as_json(const char *key, const char *value, void *json_obj)
Add authentication data key value to a JSON object.
Definition openvasd.c:266
void openvasd_target_add_credential(openvasd_target_t *target, scan_credential_t *credential)
Add a credential to an openvasd target.
Definition openvasd.c:602
char * openvasd_build_scan_config_json(openvasd_target_t *target, GHashTable *scan_preferences, GSList *vts)
Build a json object with data necessary to start a scan.
Definition openvasd.c:373
static void add_credential_to_scan_json(gpointer credentials, gpointer cred_array)
Add a credential to the scan json object.
Definition openvasd.c:281
http_scanner_resp_t openvasd_get_vt_stream_init(http_scanner_connector_t conn)
Fetch feed metadata chunk by chunk.
Definition openvasd.c:72
openvasd_target_t * openvasd_target_new(const gchar *scanid, const gchar *hosts, const gchar *ports, const gchar *exclude_hosts, int reverse_lookup_unify, int reverse_lookup_only)
Create a new openvasd target.
Definition openvasd.c:511
static void add_port_to_scan_json(gpointer range, gpointer p_array)
Add a port range to the scan json object.
Definition openvasd.c:235
void openvasd_target_set_finished_hosts(openvasd_target_t *target, const gchar *finished_hosts)
Set the finished hosts of an openvasd target.
Definition openvasd.c:540
void openvasd_vt_single_free(openvasd_vt_single_t *vt_single)
Free a single openvasd VT, including all preference values.
Definition openvasd.c:637
int openvasd_get_vt_stream(http_scanner_connector_t conn)
Get a new feed metadata chunk.
Definition openvasd.c:97
static void add_scan_preferences_to_scan_json(gpointer key, gpointer val, gpointer scan_prefs_array)
Add a scan preference to the scan json object.
Definition openvasd.c:315
static void add_vts_to_scan_json(gpointer single_vt, gpointer vts_array)
Add a VT to the scan json object.
Definition openvasd.c:331
void openvasd_vt_single_add_value(openvasd_vt_single_t *vt_single, const gchar *name, const gchar *value)
Add a preference value to an openvasd VT.
Definition openvasd.c:658
http_scanner_resp_t openvasd_get_performance(http_scanner_connector_t conn, openvasd_get_performance_opts_t opts)
Get performance data.
Definition openvasd.c:138
void openvasd_target_add_alive_test_methods(openvasd_target_t *target, gboolean icmp, gboolean tcp_syn, gboolean tcp_ack, gboolean arp, gboolean consider_alive)
Add alive test methods to openvasd target.
Definition openvasd.c:580
openvasd_vt_single_t * openvasd_vt_single_new(const gchar *vt_id)
Create a new single openvasd VT.
Definition openvasd.c:619
API for Openvas Daemon communication.
struct openvasd_vt_single openvasd_vt_single_t
Definition openvasd.h:43
struct openvasd_target openvasd_target_t
Definition openvasd.h:41
Struct holding target information.
Definition openvasd.c:39
int reverse_lookup_only
Definition openvasd.c:52
gboolean icmp
Definition openvasd.c:46
gchar * ports
Definition openvasd.c:44
gboolean tcp_ack
Definition openvasd.c:48
gchar * exclude_hosts
Definition openvasd.c:42
int reverse_lookup_unify
Definition openvasd.c:51
gboolean arp
Definition openvasd.c:49
GSList * credentials
Definition openvasd.c:41
gboolean tcp_syn
Definition openvasd.c:47
gboolean consider_alive
Definition openvasd.c:50
gchar * finished_hosts
Definition openvasd.c:45
gchar * hosts
Definition openvasd.c:43
gchar * scan_id
Definition openvasd.c:40
Struct holding vt information.
Definition openvasd.c:59
gchar * vt_id
Definition openvasd.c:60
GHashTable * vt_values
Definition openvasd.c:61
A port range.
Definition networking.h:35
int start
Definition networking.h:40
port_protocol_t type
Definition networking.h:41
int end
Definition networking.h:38