23#include "base/hosts.h"
32#include <gvm/base/networking.h>
33#include <gvm/util/kb.h>
36#include <net/if_arp.h>
38#include <netinet/in.h>
47#define G_LOG_DOMAIN "sd nasl"
55 GSList *tmp, *hostnames;
74 g_slist_free_full (hostnames, g_free);
107 retc->
size = strlen (source);
117 const char *json = NULL;
123 nasl_perror (lexic,
"%s: Empty hostname\n", __func__);
126 if (!source || !*source)
129 lower = g_ascii_strdown (value, -1);
135 goto end_add_hostname;
140 g_warning (
"Unable to send %s to host process", lower);
144 g_free ((
void *) json);
163 nasl_perror (lexic,
"%s: Empty hostname\n", __func__);
167 list = gvm_resolve_list (value);
181 g_slist_free_full (
list, g_free);
188 struct in6_addr in6addr;
193 nasl_perror (lexic,
"%s: Empty hostname\n", __func__);
197 if (!gvm_resolve_as_addr6 (value, &in6addr))
200 retc->
x.
str_val = addr6_as_str (&in6addr);
220 retc->
x.
str_val = addr6_as_str (ip);
248 gvm_host_t *target = NULL;
267 target = gvm_host_from_str (t);
276 t = gvm_host_reverse_lookup (target);
284 retc->
size = strlen (t);
301 if (port < 0 || port > USHRT_MAX)
319 if (port < 0 || port > USHRT_MAX)
359 struct in6_addr in6addr;
360 struct in6_addr src6;
364 if (gvm_source_iface_is_set ())
366 struct in6_addr addr;
369 if (IN6_IS_ADDR_V4MAPPED (ia))
370 gvm_source_addr_as_addr6 (&addr);
372 gvm_source_addr6 (&addr);
373 retc->
x.
str_val = addr6_as_str (&addr);
382 memcpy (&src6, ia,
sizeof (
struct in6_addr));
386 if (err && !IN6_ARE_ADDR_EQUAL (&src6, &in6addr_any))
388 retc->
x.
str_val = addr6_as_str (&src6);
396 if (gvm_resolve_as_addr6 (
hostname, &in6addr))
398 retc->
x.
str_val = addr6_as_str (&in6addr);
462 if (port >= 0 && port <= USHRT_MAX)
471 retc->
size = strlen (s);
488 char *hn[2], **names[2];
489 struct in_addr ia, *a[2];
490 int i, j, n[2], names_nb[2], flag;
493 memset (names_nb,
'\0',
sizeof (names_nb));
494 memset (names,
'\0',
sizeof (names));
495 memset (a,
'\0',
sizeof (a));
496 for (i = 0; i < 2; i++)
501 nasl_perror (lexic,
"same_host needs two parameters!\n");
504 if (strlen (hn[i]) >= 256)
506 nasl_perror (lexic,
"same_host(): Too long hostname !\n");
510 for (i = 0; i < 2; i++)
512 if (!inet_aton (hn[i], &ia))
514 h = gethostbyname (hn[i]);
517 nasl_perror (lexic,
"same_host: %s does not resolve\n", hn[i]);
522 names[i] = g_malloc0 (
sizeof (
char *));
523 names[i][0] = g_strdup (hn[i]);
528 for (names_nb[i] = 0; h->h_aliases[names_nb[i]] != NULL;
532 names[i] = g_malloc0 (
sizeof (
char *) * names_nb[i]);
533 names[i][0] = g_strdup (h->h_name);
534 for (j = 1; j < names_nb[i]; j++)
535 names[i][j] = g_strdup (h->h_aliases[j - 1]);
538 for (n[i] = 0; ((
struct in_addr **) h->h_addr_list)[n[i]] != NULL;
541 a[i] = g_malloc0 ((gsize) h->h_length * n[i]);
542 for (j = 0; j < n[i]; j++)
543 a[i][j] = *((
struct in_addr **) h->h_addr_list)[j];
549 h = gethostbyaddr ((
const char *) &ia,
sizeof (ia), AF_INET);
554 a[i] = g_malloc0 (
sizeof (
struct in_addr));
555 memcpy (a[i], &ia,
sizeof (
struct in_addr));
560 for (names_nb[i] = 0; h->h_aliases[names_nb[i]] != NULL;
564 names[i] = g_malloc0 (
sizeof (
char *) * names_nb[i]);
565 names[i][0] = g_strdup (h->h_name);
566 for (j = 1; j < names_nb[i]; j++)
567 names[i][j] = g_strdup (h->h_aliases[j - 1]);
570 for (n[i] = 0; ((
struct in_addr **) h->h_addr_list)[n[i]] != NULL;
573 a[i] = g_malloc0 ((gsize) h->h_length * n[i]);
574 for (j = 0; j < n[i]; j++)
575 a[i][j] = *((
struct in_addr **) h->h_addr_list)[j];
580 for (i = 0; i < n[0] && !flag; i++)
581 for (j = 0; j < n[1] && !flag; j++)
582 if (a[0][i].s_addr == a[1][j].s_addr)
588 for (i = 0; i < names_nb[0] && !flag; i++)
589 for (j = 0; j < names_nb[1] && !flag; j++)
590 if (strcmp (names[0][i], names[1][j]) == 0)
598 for (i = 0; i < 2; i++)
601 for (i = 0; i < 2; i++)
603 for (j = 0; j < names_nb[i]; j++)
604 g_free (names[i][j]);
616 struct in6_addr *addr;
626 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