19#include "../misc/ipc_openvas.h"
20#include "../misc/network.h"
21#include "../misc/pcap_openvas.h"
22#include "../misc/plugutils.h"
31#include <gvm/base/networking.h>
32#include <gvm/util/kb.h>
34#include <net/if_arp.h>
36#include <netinet/in.h>
45#define G_LOG_DOMAIN "sd nasl"
53 GSList *tmp, *hostnames;
72 g_slist_free_full (hostnames, g_free);
105 retc->
size = strlen (source);
115 const char *json = NULL;
121 nasl_perror (lexic,
"%s: Empty hostname\n", __func__);
124 if (!source || !*source)
127 lower = g_ascii_strdown (value, -1);
133 goto end_add_hostname;
138 g_warning (
"Unable to send %s to host process", lower);
142 g_free ((
void *) json);
161 nasl_perror (lexic,
"%s: Empty hostname\n", __func__);
165 list = gvm_resolve_list (value);
179 g_slist_free_full (
list, g_free);
186 struct in6_addr in6addr;
191 nasl_perror (lexic,
"%s: Empty hostname\n", __func__);
195 if (!gvm_resolve_as_addr6 (value, &in6addr))
198 retc->
x.
str_val = addr6_as_str (&in6addr);
218 retc->
x.
str_val = addr6_as_str (ip);
304 struct in6_addr in6addr;
305 struct in6_addr src6;
309 if (gvm_source_iface_is_set ())
311 struct in6_addr addr;
314 if (IN6_IS_ADDR_V4MAPPED (ia))
315 gvm_source_addr_as_addr6 (&addr);
317 gvm_source_addr6 (&addr);
318 retc->
x.
str_val = addr6_as_str (&addr);
327 memcpy (&src6, ia,
sizeof (
struct in6_addr));
331 if (err && !IN6_ARE_ADDR_EQUAL (&src6, &in6addr_any))
333 retc->
x.
str_val = addr6_as_str (&src6);
341 if (gvm_resolve_as_addr6 (
hostname, &in6addr))
343 retc->
x.
str_val = addr6_as_str (&in6addr);
416 retc->
size = strlen (s);
433 char *hn[2], **names[2];
434 struct in_addr ia, *a[2];
435 int i, j, n[2], names_nb[2], flag;
438 memset (names_nb,
'\0',
sizeof (names_nb));
439 memset (names,
'\0',
sizeof (names));
440 memset (a,
'\0',
sizeof (a));
441 for (i = 0; i < 2; i++)
446 nasl_perror (lexic,
"same_host needs two parameters!\n");
449 if (strlen (hn[i]) >= 256)
451 nasl_perror (lexic,
"same_host(): Too long hostname !\n");
455 for (i = 0; i < 2; i++)
457 if (!inet_aton (hn[i], &ia))
459 h = gethostbyname (hn[i]);
462 nasl_perror (lexic,
"same_host: %s does not resolve\n", hn[i]);
467 names[i] = g_malloc0 (
sizeof (
char *));
468 names[i][0] = g_strdup (hn[i]);
473 for (names_nb[i] = 0; h->h_aliases[names_nb[i]] != NULL;
477 names[i] = g_malloc0 (
sizeof (
char *) * names_nb[i]);
478 names[i][0] = g_strdup (h->h_name);
479 for (j = 1; j < names_nb[i]; j++)
480 names[i][j] = g_strdup (h->h_aliases[j - 1]);
483 for (n[i] = 0; ((
struct in_addr **) h->h_addr_list)[n[i]] != NULL;
486 a[i] = g_malloc0 ((gsize) h->h_length * n[i]);
487 for (j = 0; j < n[i]; j++)
488 a[i][j] = *((
struct in_addr **) h->h_addr_list)[j];
494 h = gethostbyaddr ((
const char *) &ia,
sizeof (ia), AF_INET);
499 a[i] = g_malloc0 (
sizeof (
struct in_addr));
500 memcpy (a[i], &ia,
sizeof (
struct in_addr));
505 for (names_nb[i] = 0; h->h_aliases[names_nb[i]] != NULL;
509 names[i] = g_malloc0 (
sizeof (
char *) * names_nb[i]);
510 names[i][0] = g_strdup (h->h_name);
511 for (j = 1; j < names_nb[i]; j++)
512 names[i][j] = g_strdup (h->h_aliases[j - 1]);
515 for (n[i] = 0; ((
struct in_addr **) h->h_addr_list)[n[i]] != NULL;
518 a[i] = g_malloc0 ((gsize) h->h_length * n[i]);
519 for (j = 0; j < n[i]; j++)
520 a[i][j] = *((
struct in_addr **) h->h_addr_list)[j];
525 for (i = 0; i < n[0] && !flag; i++)
526 for (j = 0; j < n[1] && !flag; j++)
527 if (a[0][i].s_addr == a[1][j].s_addr)
533 for (i = 0; i < names_nb[0] && !flag; i++)
534 for (j = 0; j < names_nb[1] && !flag; j++)
535 if (strcmp (names[0][i], names[1][j]) == 0)
543 for (i = 0; i < 2; i++)
546 for (i = 0; i < 2; i++)
548 for (j = 0; j < names_nb[i]; j++)
549 g_free (names[i][j]);
561 struct in6_addr *addr;
571 if (IN6_IS_ADDR_V4MAPPED (addr) == 1)
int ipc_send(struct ipc_context *context, enum ipc_relation to, const char *msg, size_t len)
sends given msg to the target based on the given context
struct ipc_data * ipc_data_type_from_hostname(const char *source, size_t source_len, const char *hostname, size_t hostname_len)
initializes ipc_data for a hostname data.
void ipc_data_destroy(ipc_data_t **data)
destroys ipc_data.
const char * ipc_data_to_json(struct ipc_data *data)
transforms ipc_data to a json string
void nasl_perror(lex_ctxt *lexic, char *msg,...)
tree_cell * nasl_same_host(lex_ctxt *lexic)
tree_cell * nasl_this_host_name(lex_ctxt *lexic)
tree_cell * get_hostname_source(lex_ctxt *lexic)
tree_cell * get_port_state(lex_ctxt *lexic)
tree_cell * get_hostname(lex_ctxt *lexic)
tree_cell * nasl_islocalhost(lex_ctxt *lexic)
tree_cell * nasl_islocalnet(lex_ctxt *lexic)
tree_cell * nasl_this_host(lex_ctxt *lexic)
tree_cell * get_host_ip(lex_ctxt *lexic)
tree_cell * get_port_transport(lex_ctxt *lexic)
Return the encapsulation mode of a port.
tree_cell * resolve_hostname(lex_ctxt *lexic)
tree_cell * get_host_open_port(lex_ctxt *lexic)
tree_cell * get_udp_port_state(lex_ctxt *lexic)
tree_cell * nasl_target_is_ipv6(lex_ctxt *lexic)
tree_cell * add_hostname(lex_ctxt *lexic)
tree_cell * get_hostnames(lex_ctxt *lexic)
tree_cell * resolve_hostname_to_multiple_ips(lex_ctxt *lexic)
Resolve a hostname and return all ip addresses as nasl array.
char * get_str_var_by_name(lex_ctxt *, const char *)
char * get_str_var_by_num(lex_ctxt *, int)
long int get_int_var_by_num(lex_ctxt *, int, int)
long int get_int_var_by_name(lex_ctxt *, const char *, int)
tree_cell * alloc_typed_cell(int typ)
int add_var_to_list(nasl_array *a, int i, const anon_nasl_var *v)
const char * get_encaps_name(openvas_encaps_t code)
int v6_is_local_ip(struct in6_addr *addr)
int v6_islocalhost(struct in6_addr *addr)
Tests whether a packet sent to IP is LIKELY to route through the kernel localhost interface.
int v6_getsourceip(struct in6_addr *src, struct in6_addr *dst)
int host_get_port_state_udp(struct script_infos *plugdata, int portnum)
int host_get_port_state(struct script_infos *plugdata, int portnum)
int plug_get_port_transport(struct script_infos *args, int port)
unsigned int plug_get_host_open_port(struct script_infos *desc)
GSList * plug_get_host_fqdn_list(struct script_infos *args)
char * plug_get_host_source(struct script_infos *args, const char *hostname)
char * plug_get_host_fqdn(struct script_infos *args)
int plug_add_host_fqdn(struct script_infos *args, const char *hostname, const char *source)
struct in6_addr * plug_get_host_ip(struct script_infos *args)
struct ipc_context * ipc_context
union st_a_nasl_var::@7 v
struct script_infos * script_infos