Greenbone Vulnerability Management Libraries  21.4.2
Data Structures | Typedefs | Enumerations | Functions
networking.h File Reference

GVM Networking related API. More...

#include "array.h"
#include <netdb.h>

Go to the source code of this file.

Data Structures

struct  range
 A port range. More...
 

Typedefs

typedef struct range range_t
 

Enumerations

enum  port_protocol_t { PORT_PROTOCOL_TCP = 0 , PORT_PROTOCOL_UDP = 1 , PORT_PROTOCOL_OTHER = 2 }
 Possible port types. More...
 

Functions

int gvm_source_iface_init (const char *)
 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, int, int)
 Binds a socket to use the global source address. More...
 
void gvm_source_addr (void *)
 Gives the source IPv4 address. More...
 
void gvm_source_addr6 (void *)
 Gives the source IPv6 address. More...
 
void gvm_source_addr_as_addr6 (struct in6_addr *)
 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 *, struct in6_addr *)
 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 *, char *)
 Stringifies an IP address. More...
 
char * addr6_as_str (const struct in6_addr *)
 Stringifies an IP address. More...
 
void sockaddr_as_str (const struct sockaddr_storage *, char *)
 Convert an IP address to string format. More...
 
int gvm_resolve (const char *, void *, int)
 Resolves a hostname to an IPv4 or IPv6 address. More...
 
GSList * gvm_resolve_list (const char *)
 Returns a list of addresses that a hostname resolves to. More...
 
int gvm_resolve_as_addr6 (const char *, struct in6_addr *)
 Resolves a hostname to an IPv4-mapped IPv6 or IPv6 address. More...
 
int validate_port_range (const char *)
 Validate a port range string. More...
 
array_tport_range_ranges (const char *)
 Create a range array from a port_range string. More...
 
int port_in_port_ranges (int, port_protocol_t, array_t *)
 Checks if a port num is in port ranges array. More...
 
int ipv6_is_enabled ()
 Checks if IPv6 support is enabled. More...
 
gchar * gvm_routethrough (struct sockaddr_storage *, struct sockaddr_storage *)
 Get Interface which should be used for routing to destination addr. More...
 

Detailed Description

GVM Networking related API.

Typedef Documentation

◆ range_t

typedef struct range range_t

Enumeration Type Documentation

◆ port_protocol_t

Possible port types.

Used in Manager database. If any symbol changes then a migrator must be added to update existing data.

Enumerator
PORT_PROTOCOL_TCP 
PORT_PROTOCOL_UDP 
PORT_PROTOCOL_OTHER 

Function Documentation

◆ addr6_as_str()

char* addr6_as_str ( const struct in6_addr *  addr6)

Stringifies an IP address.

Parameters
[in]addr6IP address.
Returns
IP as string. NULL otherwise.

◆ addr6_to_str()

void addr6_to_str ( const struct in6_addr *  addr6,
char *  str 
)

Stringifies an IP address.

Parameters
[in]addr6IP address.
[out]strBuffer to output IP.

◆ gvm_resolve()

int gvm_resolve ( const char *  name,
void *  dst,
int  family 
)

Resolves a hostname to an IPv4 or IPv6 address.

Parameters
[in]nameHostname to resolve.
[out]dstBuffer to store resolved address. Size must be at least 4 bytes for AF_INET and 16 bytes for AF_INET6.
[in]familyEither AF_INET or AF_INET6.
Returns
-1 if error, 0 otherwise.

◆ 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.

Parameters
[in]nameHostname to resolve.
[out]ip6Buffer to store resolved address.
Returns
-1 if error, 0 otherwise.

◆ gvm_resolve_list()

GSList* gvm_resolve_list ( const char *  name)

Returns a list of addresses that a hostname resolves to.

Parameters
[in]nameHostname to resolve.
Returns
List of addresses, NULL otherwise.

◆ gvm_routethrough()

gchar* gvm_routethrough ( struct sockaddr_storage *  storage_dest,
struct sockaddr_storage *  storage_source 
)

Get Interface which should be used for routing to destination addr.

This function should be used sparingly as it parses /proc/net/route for every call.

Parameters
[in]storage_destDestination address.
[out]storage_sourceSource address. Is set to either address of the interface we use or global source address if set. Only gets filled if storage_source != NULL.
Returns
Interface name of interface used for routing to destination address. NULL if no interface found or Error.

◆ gvm_source_addr()

void gvm_source_addr ( void *  addr)

Gives the source IPv4 address.

Parameters
[out]addrBuffer of at least 4 bytes.

◆ gvm_source_addr6()

void gvm_source_addr6 ( void *  addr6)

Gives the source IPv6 address.

Parameters
[out]addr6Buffer of at least 16 bytes.

◆ gvm_source_addr6_str()

char* gvm_source_addr6_str ( void  )

Gives the source IPv6 address in string format.

Returns
Source IPv6 string. Free with g_free().

◆ gvm_source_addr_as_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.

Parameters
[out]addr6Buffer of at least 16 bytes.

◆ gvm_source_addr_str()

char* gvm_source_addr_str ( void  )

Gives the source IPv4 address in string format.

Returns
Source IPv4 string. Free with g_free().

◆ gvm_source_iface_init()

int gvm_source_iface_init ( const char *  iface)

Initializes the source network interface name and related information.

Parameters
[in]ifaceName of network interface to use as source interface.
Returns
0 if success. If error, return 1 and reset source values to default.

◆ gvm_source_iface_is_set()

int gvm_source_iface_is_set ( void  )

Check if global_source global_source_iface is set.

Returns
1 if set, 0 otherwise.

◆ gvm_source_set_socket()

int gvm_source_set_socket ( int  socket,
int  port,
int  family 
)

Binds a socket to use the global source address.

Parameters
[in]socketSocket to set source address for.
[in]portNetwork port for socket.
[in]familyFamily of socket. AF_INET or AF_INET6.
Returns
0 if success, -1 if error.

◆ ipv4_as_ipv6()

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.

Parameters
[in]ip4IPv4 address to map.
[out]ip6Buffer to store the IPv6 address.

◆ ipv6_is_enabled()

int ipv6_is_enabled ( )

Checks if IPv6 support is enabled.

Returns
1 if IPv6 is enabled, 0 if disabled.

◆ port_in_port_ranges()

int port_in_port_ranges ( int  pnum,
port_protocol_t  ptype,
array_t pranges 
)

Checks if a port num is in port ranges array.

Parameters
[in]pnumPort number.
[in]ptypePort type.
[in]prangesArray of port ranges.
Returns
1 if port in port ranges, 0 otherwise.

◆ port_range_ranges()

array_t* port_range_ranges ( const char *  port_range)

Create a range array from a port_range string.

Parameters
[in]port_rangeValid port_range string.
Returns
Range array or NULL if port_range invalid or NULL.

◆ sockaddr_as_str()

void sockaddr_as_str ( const struct sockaddr_storage *  addr,
char *  str 
)

Convert an IP address to string format.

Parameters
[in]addrAddress to convert.
[out]strBuffer of INET6_ADDRSTRLEN size.

◆ validate_port_range()

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".

Parameters
[in]port_rangeA port range.
Returns
0 success, 1 failed.