23#include "base/hosts.h"
32#include <gvm/base/networking.h>
33#include <gvm/util/kb.h>
35#include <net/if_arp.h>
37#include <netinet/in.h>
46#define G_LOG_DOMAIN "sd nasl"
54 GSList *tmp, *hostnames;
73 g_slist_free_full (hostnames, g_free);
106 retc->
size = strlen (source);
116 const char *json = NULL;
122 nasl_perror (lexic,
"%s: Empty hostname\n", __func__);
125 if (!source || !*source)
128 lower = g_ascii_strdown (value, -1);
134 goto end_add_hostname;
139 g_warning (
"Unable to send %s to host process", lower);
143 g_free ((
void *) json);
162 nasl_perror (lexic,
"%s: Empty hostname\n", __func__);
166 list = gvm_resolve_list (value);
180 g_slist_free_full (
list, g_free);
187 struct in6_addr in6addr;
192 nasl_perror (lexic,
"%s: Empty hostname\n", __func__);
196 if (!gvm_resolve_as_addr6 (value, &in6addr))
199 retc->
x.
str_val = addr6_as_str (&in6addr);
219 retc->
x.
str_val = addr6_as_str (ip);
247 gvm_host_t *target = NULL;
266 target = gvm_host_from_str (t);
275 t = gvm_host_reverse_lookup (target);
283 retc->
size = strlen (t);
357 struct in6_addr in6addr;
358 struct in6_addr src6;
362 if (gvm_source_iface_is_set ())
364 struct in6_addr addr;
367 if (IN6_IS_ADDR_V4MAPPED (ia))
368 gvm_source_addr_as_addr6 (&addr);
370 gvm_source_addr6 (&addr);
371 retc->
x.
str_val = addr6_as_str (&addr);
380 memcpy (&src6, ia,
sizeof (
struct in6_addr));
384 if (err && !IN6_ARE_ADDR_EQUAL (&src6, &in6addr_any))
386 retc->
x.
str_val = addr6_as_str (&src6);
394 if (gvm_resolve_as_addr6 (
hostname, &in6addr))
396 retc->
x.
str_val = addr6_as_str (&in6addr);
469 retc->
size = strlen (s);
486 char *hn[2], **names[2];
487 struct in_addr ia, *a[2];
488 int i, j, n[2], names_nb[2], flag;
491 memset (names_nb,
'\0',
sizeof (names_nb));
492 memset (names,
'\0',
sizeof (names));
493 memset (a,
'\0',
sizeof (a));
494 for (i = 0; i < 2; i++)
499 nasl_perror (lexic,
"same_host needs two parameters!\n");
502 if (strlen (hn[i]) >= 256)
504 nasl_perror (lexic,
"same_host(): Too long hostname !\n");
508 for (i = 0; i < 2; i++)
510 if (!inet_aton (hn[i], &ia))
512 h = gethostbyname (hn[i]);
515 nasl_perror (lexic,
"same_host: %s does not resolve\n", hn[i]);
520 names[i] = g_malloc0 (
sizeof (
char *));
521 names[i][0] = g_strdup (hn[i]);
526 for (names_nb[i] = 0; h->h_aliases[names_nb[i]] != NULL;
530 names[i] = g_malloc0 (
sizeof (
char *) * names_nb[i]);
531 names[i][0] = g_strdup (h->h_name);
532 for (j = 1; j < names_nb[i]; j++)
533 names[i][j] = g_strdup (h->h_aliases[j - 1]);
536 for (n[i] = 0; ((
struct in_addr **) h->h_addr_list)[n[i]] != NULL;
539 a[i] = g_malloc0 ((gsize) h->h_length * n[i]);
540 for (j = 0; j < n[i]; j++)
541 a[i][j] = *((
struct in_addr **) h->h_addr_list)[j];
547 h = gethostbyaddr ((
const char *) &ia,
sizeof (ia), AF_INET);
552 a[i] = g_malloc0 (
sizeof (
struct in_addr));
553 memcpy (a[i], &ia,
sizeof (
struct in_addr));
558 for (names_nb[i] = 0; h->h_aliases[names_nb[i]] != NULL;
562 names[i] = g_malloc0 (
sizeof (
char *) * names_nb[i]);
563 names[i][0] = g_strdup (h->h_name);
564 for (j = 1; j < names_nb[i]; j++)
565 names[i][j] = g_strdup (h->h_aliases[j - 1]);
568 for (n[i] = 0; ((
struct in_addr **) h->h_addr_list)[n[i]] != NULL;
571 a[i] = g_malloc0 ((gsize) h->h_length * n[i]);
572 for (j = 0; j < n[i]; j++)
573 a[i][j] = *((
struct in_addr **) h->h_addr_list)[j];
578 for (i = 0; i < n[0] && !flag; i++)
579 for (j = 0; j < n[1] && !flag; j++)
580 if (a[0][i].s_addr == a[1][j].s_addr)
586 for (i = 0; i < names_nb[0] && !flag; i++)
587 for (j = 0; j < names_nb[1] && !flag; j++)
588 if (strcmp (names[0][i], names[1][j]) == 0)
596 for (i = 0; i < 2; i++)
599 for (i = 0; i < 2; i++)
601 for (j = 0; j < names_nb[i]; j++)
602 g_free (names[i][j]);
614 struct in6_addr *addr;
624 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
void ipc_data_destroy(ipc_data_t **data)
destroys ipc_data.
const char * ipc_data_to_json(ipc_data_t *data)
transforms ipc_data to a json string
ipc_data_t * 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 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 * host_reverse_lookup(lex_ctxt *lexic)
implements ip_reverse_lookup
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.
struct struct_lex_ctxt lex_ctxt
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)
struct st_a_nasl_var anon_nasl_var
struct st_nasl_array nasl_array
const char * get_encaps_name(openvas_encaps_t code)
Header file for module network.
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)
Header file for module pcap.
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)
char * plug_get_host_ip_str(struct script_infos *desc)
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)
Header file for module plugutils.
union TC::@332262321161220155002104006201360276211317150140 x
struct ipc_context * ipc_context
union st_a_nasl_var::@154137074032032170165360023270032033276061363156 v
struct script_infos * script_infos