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_t * | port_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

enum 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] | addr6 | IP 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] | addr6 | IP address.
  [out] | str | Buffer 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] | 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.

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] | name | Hostname to resolve.
  [out] | ip6 | Buffer 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] | name | Hostname 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_dest | Destination address.
  [out] | storage_source | Source 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] | addr | Buffer of at least 4 bytes.

## gvm_source_addr6()

void gvm_source_addr6 | ( | void * | addr6 | ) |

Gives the source IPv6 address.

Parameters

  [out] | addr6 | Buffer 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] | addr6 | Buffer 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] | iface | Name 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] | socket | Socket to set source address for.
  [in] | port | Network port for socket.
  [in] | family | Family 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] | ip4 | IPv4 address to map.
  [out] | ip6 | Buffer 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] | pnum | Port number.
  [in] | ptype | Port type.
  [in] | pranges | Array 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_range | Valid 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] | addr | Address to convert.
  [out] | str | Buffer 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_range | A port range.

Returns
  0 success, 1 failed.