Sourcemeta Core 0.0.0
Loading...
Searching...
No Matches
IP

IPv4 (RFC 3986) and IPv6 (RFC 3986, RFC 4291) address validation. More...

Enumerations

enum class  sourcemeta::core::IPAddressClass : std::uint8_t {
  IPAddressClass::Public , IPAddressClass::Loopback , IPAddressClass::Private , IPAddressClass::LinkLocal ,
  IPAddressClass::UniqueLocal , IPAddressClass::Multicast , IPAddressClass::Reserved , IPAddressClass::Unspecified
}

Functions

SOURCEMETA_CORE_IP_EXPORT auto sourcemeta::core::is_ipv4 (std::string_view address) -> bool
SOURCEMETA_CORE_IP_EXPORT auto sourcemeta::core::is_ipv6 (std::string_view address) -> bool
SOURCEMETA_CORE_IP_EXPORT auto sourcemeta::core::ipv4_classify (const std::string_view address) -> std::optional< IPAddressClass >
SOURCEMETA_CORE_IP_EXPORT auto sourcemeta::core::ipv6_classify (const std::string_view address) -> std::optional< IPAddressClass >
SOURCEMETA_CORE_IP_EXPORT auto sourcemeta::core::ip_is_globally_routable (const std::string_view address) -> bool

Detailed Description

IPv4 (RFC 3986) and IPv6 (RFC 3986, RFC 4291) address validation.

This functionality is included as follows:

#include <sourcemeta/core/ip.h>

Enumeration Type Documentation

◆ IPAddressClass

enum class sourcemeta::core::IPAddressClass : std::uint8_t
strong

The reachability class of an IP address (RFC 6890).

Enumerator
Public 

A globally reachable address.

Loopback 

A loopback address (RFC 1122, RFC 4291 Section 2.5.3).

Private 

A private-use or shared address (RFC 1918, RFC 6598).

LinkLocal 

A link-local address (RFC 3927, RFC 4291 Section 2.5.6).

UniqueLocal 

A unique local address (RFC 4193).

Multicast 

A multicast address (RFC 5771, RFC 4291 Section 2.7).

Reserved 

An address reserved for future or special use (RFC 1112, RFC 5737).

Unspecified 

The unspecified address (RFC 4291 Section 2.5.2) or the "this host" network (RFC 1122).

Function Documentation

◆ ip_is_globally_routable()

SOURCEMETA_CORE_IP_EXPORT auto sourcemeta::core::ip_is_globally_routable ( const std::string_view address) -> bool

Whether an IPv4 or IPv6 address is globally reachable (RFC 6890), returning false both for an address that is not and for input that is not a valid address. For example:

#include <sourcemeta/core/ip.h>
#include <cassert>
SOURCEMETA_CORE_IP_EXPORT auto ip_is_globally_routable(const std::string_view address) -> bool

◆ ipv4_classify()

SOURCEMETA_CORE_IP_EXPORT auto sourcemeta::core::ipv4_classify ( const std::string_view address) -> std::optional< IPAddressClass >

Classify an IPv4 address (RFC 6890), returning no value when the input is not a valid IPv4 address. For example:

#include <sourcemeta/core/ip.h>
#include <cassert>
assert(sourcemeta::core::ipv4_classify("127.0.0.1").value() ==
SOURCEMETA_CORE_IP_EXPORT auto ipv4_classify(const std::string_view address) -> std::optional< IPAddressClass >
@ Loopback
A loopback address (RFC 1122, RFC 4291 Section 2.5.3).
Definition ip.h:60

◆ ipv6_classify()

SOURCEMETA_CORE_IP_EXPORT auto sourcemeta::core::ipv6_classify ( const std::string_view address) -> std::optional< IPAddressClass >

Classify an IPv6 address (RFC 6890), returning no value when the input is not a valid IPv6 address. An IPv4-mapped or IPv4-compatible address is classified as its embedded IPv4 address. For example:

#include <sourcemeta/core/ip.h>
#include <cassert>
assert(sourcemeta::core::ipv6_classify("::1").value() ==
SOURCEMETA_CORE_IP_EXPORT auto ipv6_classify(const std::string_view address) -> std::optional< IPAddressClass >

◆ is_ipv4()

SOURCEMETA_CORE_IP_EXPORT auto sourcemeta::core::is_ipv4 ( std::string_view address) -> bool

Check whether the given string is a valid IPv4 address per RFC 3986 Section 3.2.2. For example:

#include <sourcemeta/core/ip.h>
#include <cassert>
assert(sourcemeta::core::is_ipv4("192.168.1.1"));
assert(!sourcemeta::core::is_ipv4("999.0.0.1"));
SOURCEMETA_CORE_IP_EXPORT auto is_ipv4(std::string_view address) -> bool

◆ is_ipv6()

SOURCEMETA_CORE_IP_EXPORT auto sourcemeta::core::is_ipv6 ( std::string_view address) -> bool

Check whether the given string is a valid IPv6 address per RFC 3986 Section 3.2.2 and RFC 4291 Section 2.2. The input must not include surrounding brackets. For example:

#include <sourcemeta/core/ip.h>
#include <cassert>
assert(sourcemeta::core::is_ipv6("2001:db8::1"));
assert(!sourcemeta::core::is_ipv6("not an address"));
SOURCEMETA_CORE_IP_EXPORT auto is_ipv6(std::string_view address) -> bool