Greenbone Vulnerability Management Libraries
11.0.1
|
Implementation of GVM Networking related API. More...
#include "networking.h"
#include <arpa/inet.h>
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <glib/gstdio.h>
#include <ifaddrs.h>
#include <net/if.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
Go to the source code of this file.
Functions | |
int | gvm_source_iface_init (const char *iface) |
Initializes the source network interface name and related information. More... | |
int | gvm_source_iface_is_set (void) |
Check if global_source global_source_iface is set. More... | |
int | gvm_source_set_socket (int socket, int port, int family) |
Binds a socket to use the global source address. More... | |
void | gvm_source_addr (void *addr) |
Gives the source IPv4 address. More... | |
void | gvm_source_addr6 (void *addr6) |
Gives the source IPv6 address. More... | |
void | gvm_source_addr_as_addr6 (struct in6_addr *addr6) |
Gives the source IPv4 mapped as an IPv6 address. eg. 192.168.20.10 would map to ::ffff:192.168.20.10. More... | |
char * | gvm_source_addr_str (void) |
Gives the source IPv4 address in string format. More... | |
char * | gvm_source_addr6_str (void) |
Gives the source IPv6 address in string format. More... | |
void | ipv4_as_ipv6 (const struct in_addr *ip4, struct in6_addr *ip6) |
Maps an IPv4 address as an IPv6 address. eg. 192.168.10.20 would map to ::ffff:192.168.10.20. More... | |
void | addr6_to_str (const struct in6_addr *addr6, char *str) |
Stringifies an IP address. More... | |
char * | addr6_as_str (const struct in6_addr *addr6) |
Stringifies an IP address. More... | |
void | sockaddr_as_str (const struct sockaddr_storage *addr, char *str) |
Convert an IP address to string format. More... | |
GSList * | gvm_resolve_list (const char *name) |
Returns a list of addresses that a hostname resolves to. More... | |
int | gvm_resolve (const char *name, void *dst, int family) |
Resolves a hostname to an IPv4 or IPv6 address. More... | |
int | gvm_resolve_as_addr6 (const char *name, struct in6_addr *ip6) |
Resolves a hostname to an IPv4-mapped IPv6 or IPv6 address. More... | |
int | validate_port_range (const char *port_range) |
Validate a port range string. More... | |
array_t * | port_range_ranges (const char *port_range) |
Create a range array from a port_range string. More... | |
int | port_in_port_ranges (int pnum, port_protocol_t ptype, array_t *pranges) |
Checks if a port num is in port ranges array. More... | |
int | ipv6_is_enabled () |
Checks if IPv6 support is enabled. More... | |
Variables | |
char | global_source_iface [IFNAMSIZ] = {'\0'} |
struct in_addr | global_source_addr = {.s_addr = 0} |
struct in6_addr | global_source_addr6 = {.s6_addr32 = {0, 0, 0, 0}} |
Implementation of GVM Networking related API.
Definition in file networking.c.
char* addr6_as_str | ( | const struct in6_addr * | addr6 | ) |
Stringifies an IP address.
[in] | addr6 | IP address. |
Definition at line 278 of file networking.c.
References addr6_to_str().
void addr6_to_str | ( | const struct in6_addr * | addr6, |
char * | str | ||
) |
Stringifies an IP address.
[in] | addr6 | IP address. |
[out] | str | Buffer to output IP. |
Definition at line 260 of file networking.c.
Referenced by addr6_as_str(), and host_name_verify().
int gvm_resolve | ( | const char * | name, |
void * | dst, | ||
int | family | ||
) |
Resolves a hostname to an IPv4 or IPv6 address.
[in] | name | Hostname to resolve. |
[out] | dst | Buffer to store resolved address. Size must be at least 4 bytes for AF_INET and 16 bytes for AF_INET6. |
[in] | family | Either AF_INET or AF_INET6. |
Definition at line 388 of file networking.c.
References ipv4_as_ipv6().
Referenced by gvm_host_resolve(), and gvm_resolve_as_addr6().
int gvm_resolve_as_addr6 | ( | const char * | name, |
struct in6_addr * | ip6 | ||
) |
Resolves a hostname to an IPv4-mapped IPv6 or IPv6 address.
[in] | name | Hostname to resolve. |
[out] | ip6 | Buffer to store resolved address. |
Definition at line 442 of file networking.c.
References gvm_resolve().
GSList* gvm_resolve_list | ( | const char * | name | ) |
Returns a list of addresses that a hostname resolves to.
[in] | name | Hostname to resolve. |
Definition at line 338 of file networking.c.
References ipv4_as_ipv6().
Referenced by gvm_hosts_resolve(), and host_name_verify().
void gvm_source_addr | ( | void * | addr | ) |
Gives the source IPv4 address.
[out] | addr | Buffer of at least 4 bytes. |
Definition at line 173 of file networking.c.
References global_source_addr.
Referenced by gvm_source_set_socket().
void gvm_source_addr6 | ( | void * | addr6 | ) |
Gives the source IPv6 address.
[out] | addr6 | Buffer of at least 16 bytes. |
Definition at line 185 of file networking.c.
References global_source_addr6.
Referenced by gvm_source_set_socket().
char* gvm_source_addr6_str | ( | void | ) |
Gives the source IPv6 address in string format.
Definition at line 224 of file networking.c.
References global_source_addr6.
void gvm_source_addr_as_addr6 | ( | struct in6_addr * | addr6 | ) |
Gives the source IPv4 mapped as an IPv6 address. eg. 192.168.20.10 would map to ::ffff:192.168.20.10.
[out] | addr6 | Buffer of at least 16 bytes. |
Definition at line 198 of file networking.c.
References global_source_addr, and ipv4_as_ipv6().
char* gvm_source_addr_str | ( | void | ) |
Gives the source IPv4 address in string format.
Definition at line 210 of file networking.c.
References global_source_addr.
int gvm_source_iface_init | ( | const char * | iface | ) |
Initializes the source network interface name and related information.
[in] | iface | Name of network interface to use as source interface. |
Definition at line 66 of file networking.c.
References global_source_addr, global_source_addr6, and global_source_iface.
int gvm_source_iface_is_set | ( | void | ) |
Check if global_source global_source_iface is set.
Definition at line 120 of file networking.c.
References global_source_iface.
int gvm_source_set_socket | ( | int | socket, |
int | port, | ||
int | family | ||
) |
Binds a socket to use the global source address.
[in] | socket | Socket to set source address for. |
[in] | port | Network port for socket. |
[in] | family | Family of socket. AF_INET or AF_INET6. |
Definition at line 135 of file networking.c.
References gvm_source_addr(), and gvm_source_addr6().
void ipv4_as_ipv6 | ( | const struct in_addr * | ip4, |
struct in6_addr * | ip6 | ||
) |
Maps an IPv4 address as an IPv6 address. eg. 192.168.10.20 would map to ::ffff:192.168.10.20.
[in] | ip4 | IPv4 address to map. |
[out] | ip6 | Buffer to store the IPv6 address. |
Definition at line 242 of file networking.c.
Referenced by gvm_host_get_addr6(), gvm_resolve(), gvm_resolve_list(), and gvm_source_addr_as_addr6().
int ipv6_is_enabled | ( | ) |
Checks if IPv6 support is enabled.
Definition at line 726 of file networking.c.
int port_in_port_ranges | ( | int | pnum, |
port_protocol_t | ptype, | ||
array_t * | pranges | ||
) |
Checks if a port num is in port ranges array.
[in] | pnum | Port number. |
[in] | ptype | Port type. |
[in] | pranges | Array of port ranges. |
Definition at line 702 of file networking.c.
References range::start, and range::type.
array_t* port_range_ranges | ( | const char * | port_range | ) |
Create a range array from a port_range string.
[in] | port_range | Valid port_range string. |
Definition at line 595 of file networking.c.
References array_add(), range::end, range::exclude, make_array(), PORT_PROTOCOL_TCP, PORT_PROTOCOL_UDP, range::start, and range::type.
void sockaddr_as_str | ( | const struct sockaddr_storage * | addr, |
char * | str | ||
) |
Convert an IP address to string format.
[in] | addr | Address to convert. |
[out] | str | Buffer of INET6_ADDRSTRLEN size. |
Definition at line 297 of file networking.c.
int validate_port_range | ( | const char * | port_range | ) |
Validate a port range string.
Accepts ranges in form of "103,U:200-1024,3000-4000,T:3-4,U:7".
[in] | port_range | A port range. |
Definition at line 459 of file networking.c.
struct in_addr global_source_addr = {.s_addr = 0} |
Definition at line 51 of file networking.c.
Referenced by gvm_source_addr(), gvm_source_addr_as_addr6(), gvm_source_addr_str(), and gvm_source_iface_init().
struct in6_addr global_source_addr6 = {.s6_addr32 = {0, 0, 0, 0}} |
Definition at line 54 of file networking.c.
Referenced by gvm_source_addr6(), gvm_source_addr6_str(), and gvm_source_iface_init().
char global_source_iface[IFNAMSIZ] = {'\0'} |
Definition at line 48 of file networking.c.
Referenced by gvm_source_iface_init(), and gvm_source_iface_is_set().