![]() |
Bitcoin Core 31.0.0
P2P Digital Currency
|
Network address. More...
#include <netaddress.h>
Classes | |
| struct | SerParams |
Public Types | |
| enum class | Encoding { V1 , V2 } |
| enum | BIP155Network : uint8_t { IPV4 = 1 , IPV6 = 2 , TORV2 = 3 , TORV3 = 4 , I2P = 5 , CJDNS = 6 } |
| BIP155 network ids recognized by this software. More... | |
Public Member Functions | |
| CNetAddr () | |
| Construct an unspecified IPv6 network address (::/128). | |
| CNetAddr (const struct in_addr &ipv4Addr) | |
| void | SetIP (const CNetAddr &ip) |
| void | SetLegacyIPv6 (std::span< const uint8_t > ipv6) |
| Set from a legacy IPv6 address. | |
| bool | SetInternal (const std::string &name) |
| Create an "internal" address that represents a name or FQDN. | |
| bool | SetSpecial (std::string_view addr) |
| Parse a Tor or I2P address and set this object to it. | |
| bool | IsBindAny () const |
| bool | IsIPv4 () const |
| bool | IsIPv6 () const |
| bool | IsRFC1918 () const |
| bool | IsRFC2544 () const |
| bool | IsRFC6598 () const |
| bool | IsRFC5737 () const |
| bool | IsRFC3849 () const |
| bool | IsRFC3927 () const |
| bool | IsRFC3964 () const |
| bool | IsRFC4193 () const |
| bool | IsRFC4380 () const |
| bool | IsRFC4843 () const |
| bool | IsRFC7343 () const |
| bool | IsRFC4862 () const |
| bool | IsRFC6052 () const |
| bool | IsRFC6145 () const |
| bool | IsHeNet () const |
| bool | IsTor () const |
| bool | IsI2P () const |
| bool | IsCJDNS () const |
| bool | HasCJDNSPrefix () const |
| bool | IsLocal () const |
| bool | IsRoutable () const |
| bool | IsInternal () const |
| bool | IsValid () const |
| bool | IsPrivacyNet () const |
| Whether this object is a privacy network. | |
| bool | IsAddrV1Compatible () const |
| Check if the current object can be serialized in pre-ADDRv2/BIP155 format. | |
| enum Network | GetNetwork () const |
| std::string | ToStringAddr () const |
| bool | GetInAddr (struct in_addr *pipv4Addr) const |
| Try to get our IPv4 address. | |
| Network | GetNetClass () const |
| uint32_t | GetLinkedIPv4 () const |
| For IPv4, mapped IPv4, SIIT translated IPv4, Teredo, 6to4 tunneled addresses, return the relevant IPv4 address as a uint32. | |
| bool | HasLinkedIPv4 () const |
| Whether this address has a linked IPv4 address (see GetLinkedIPv4()). | |
| std::vector< unsigned char > | GetAddrBytes () const |
| int | GetReachabilityFrom (const CNetAddr &paddrPartner) const |
| Calculates a metric for how reachable (*this) is from a given partner. | |
| CNetAddr (const struct in6_addr &pipv6Addr, uint32_t scope=0) | |
| bool | GetIn6Addr (struct in6_addr *pipv6Addr) const |
| Try to get our IPv6 (or CJDNS) address. | |
| bool | IsRelayable () const |
| Whether this address should be relayed to other peers even if we can't reach it ourselves. | |
| template<typename Stream > | |
| void | Serialize (Stream &s) const |
| Serialize to a stream. | |
| template<typename Stream > | |
| void | Unserialize (Stream &s) |
| Unserialize from a stream. | |
Static Public Attributes | |
| static constexpr SerParams | V1 {Encoding::V1} |
| static constexpr SerParams | V2 {Encoding::V2} |
Protected Attributes | |
| prevector< ADDR_IPV6_SIZE, uint8_t > | m_addr {ADDR_IPV6_SIZE, 0x0} |
| Raw representation of the network address. | |
| Network | m_net {NET_IPV6} |
| Network to which this address belongs. | |
| uint32_t | m_scope_id {0} |
| Scope id if scoped/link-local IPV6 address. | |
Private Member Functions | |
| bool | SetTor (std::string_view addr) |
| Parse a Tor address and set this object to it. | |
| bool | SetI2P (std::string_view addr) |
| Parse an I2P address and set this object to it. | |
| BIP155Network | GetBIP155Network () const |
| Get the BIP155 network id of this address. | |
| bool | SetNetFromBIP155Network (uint8_t possible_bip155_net, size_t address_size) |
Set m_net from the provided BIP155 network id and size after validation. | |
| void | SerializeV1Array (uint8_t(&arr)[V1_SERIALIZATION_SIZE]) const |
| Serialize in pre-ADDRv2/BIP155 format to an array. | |
| template<typename Stream > | |
| void | SerializeV1Stream (Stream &s) const |
| Serialize in pre-ADDRv2/BIP155 format to a stream. | |
| template<typename Stream > | |
| void | SerializeV2Stream (Stream &s) const |
| Serialize as ADDRv2 / BIP155. | |
| void | UnserializeV1Array (uint8_t(&arr)[V1_SERIALIZATION_SIZE]) |
| Unserialize from a pre-ADDRv2/BIP155 format from an array. | |
| template<typename Stream > | |
| void | UnserializeV1Stream (Stream &s) |
| Unserialize from a pre-ADDRv2/BIP155 format from a stream. | |
| template<typename Stream > | |
| void | UnserializeV2Stream (Stream &s) |
| Unserialize from a ADDRv2 / BIP155 format. | |
Static Private Attributes | |
| static constexpr size_t | V1_SERIALIZATION_SIZE = ADDR_IPV6_SIZE |
| Size of CNetAddr when serialized as ADDRv1 (pre-BIP155) (in bytes). | |
| static constexpr size_t | MAX_ADDRV2_SIZE = 512 |
| Maximum size of an address as defined in BIP155 (in bytes). | |
Friends | |
| class | CSubNet |
| bool | operator== (const CNetAddr &a, const CNetAddr &b) |
| bool | operator< (const CNetAddr &a, const CNetAddr &b) |
Network address.
Definition at line 112 of file netaddress.h.
| enum CNetAddr::BIP155Network : uint8_t |
BIP155 network ids recognized by this software.
| Enumerator | |
|---|---|
| IPV4 | |
| IPV6 | |
| TORV2 | |
| TORV3 | |
| I2P | |
| CJDNS | |
Definition at line 263 of file netaddress.h.
|
strong |
| Enumerator | |
|---|---|
| V1 | |
| V2 | BIP155 encoding. |
Definition at line 223 of file netaddress.h.
|
default |
Construct an unspecified IPv6 network address (::/128).
Definition at line 692 of file netaddress.cpp.
|
private |
Get the BIP155 network id of this address.
Must not be called for IsInternal() objects.
Definition at line 27 of file netaddress.cpp.
Try to get our IPv6 (or CJDNS) address.
| [out] | pipv6Addr | The in6_addr struct to which to copy. |
Definition at line 642 of file netaddress.cpp.
Try to get our IPv4 address.
| [out] | pipv4Addr | The in_addr struct to which to copy. |
Definition at line 623 of file netaddress.cpp.
| uint32_t CNetAddr::GetLinkedIPv4 | ( | ) | const |
For IPv4, mapped IPv4, SIIT translated IPv4, Teredo, 6to4 tunneled addresses, return the relevant IPv4 address as a uint32.
Definition at line 657 of file netaddress.cpp.
| Network CNetAddr::GetNetClass | ( | ) | const |
Definition at line 674 of file netaddress.cpp.
| enum Network CNetAddr::GetNetwork | ( | ) | const |
Definition at line 496 of file netaddress.cpp.
Calculates a metric for how reachable (*this) is from a given partner.
Definition at line 713 of file netaddress.cpp.
|
inline |
| bool CNetAddr::HasLinkedIPv4 | ( | ) | const |
Whether this address has a linked IPv4 address (see GetLinkedIPv4()).
Definition at line 652 of file netaddress.cpp.
| bool CNetAddr::IsAddrV1Compatible | ( | ) | const |
Check if the current object can be serialized in pre-ADDRv2/BIP155 format.
Definition at line 477 of file netaddress.cpp.
| bool CNetAddr::IsBindAny | ( | ) | const |
Definition at line 303 of file netaddress.cpp.
|
inline |
| bool CNetAddr::IsHeNet | ( | ) | const |
Definition at line 393 of file netaddress.cpp.
|
inline |
| bool CNetAddr::IsInternal | ( | ) | const |
Definition at line 472 of file netaddress.cpp.
|
inline |
|
inline |
| bool CNetAddr::IsLocal | ( | ) | const |
Definition at line 398 of file netaddress.cpp.
|
inline |
Whether this object is a privacy network.
TODO: consider adding IsCJDNS() here when more peers adopt CJDNS, see: https://github.com/bitcoin/bitcoin/pull/27411#issuecomment-1497176155
Definition at line 189 of file netaddress.h.
|
inline |
Whether this address should be relayed to other peers even if we can't reach it ourselves.
Definition at line 218 of file netaddress.h.
| bool CNetAddr::IsRFC1918 | ( | ) | const |
Definition at line 311 of file netaddress.cpp.
| bool CNetAddr::IsRFC2544 | ( | ) | const |
Definition at line 319 of file netaddress.cpp.
| bool CNetAddr::IsRFC3849 | ( | ) | const |
Definition at line 341 of file netaddress.cpp.
| bool CNetAddr::IsRFC3927 | ( | ) | const |
Definition at line 324 of file netaddress.cpp.
| bool CNetAddr::IsRFC3964 | ( | ) | const |
Definition at line 346 of file netaddress.cpp.
| bool CNetAddr::IsRFC4193 | ( | ) | const |
Definition at line 369 of file netaddress.cpp.
| bool CNetAddr::IsRFC4380 | ( | ) | const |
Definition at line 358 of file netaddress.cpp.
| bool CNetAddr::IsRFC4843 | ( | ) | const |
Definition at line 381 of file netaddress.cpp.
| bool CNetAddr::IsRFC4862 | ( | ) | const |
Definition at line 363 of file netaddress.cpp.
| bool CNetAddr::IsRFC5737 | ( | ) | const |
Definition at line 334 of file netaddress.cpp.
| bool CNetAddr::IsRFC6052 | ( | ) | const |
Definition at line 351 of file netaddress.cpp.
| bool CNetAddr::IsRFC6145 | ( | ) | const |
Definition at line 374 of file netaddress.cpp.
| bool CNetAddr::IsRFC6598 | ( | ) | const |
Definition at line 329 of file netaddress.cpp.
| bool CNetAddr::IsRFC7343 | ( | ) | const |
Definition at line 387 of file netaddress.cpp.
| bool CNetAddr::IsRoutable | ( | ) | const |
Definition at line 462 of file netaddress.cpp.
|
inline |
| bool CNetAddr::IsValid | ( | ) | const |
Definition at line 424 of file netaddress.cpp.
Serialize to a stream.
Definition at line 238 of file netaddress.h.
Serialize in pre-ADDRv2/BIP155 format to an array.
Definition at line 324 of file netaddress.h.
Serialize in pre-ADDRv2/BIP155 format to a stream.
Definition at line 362 of file netaddress.h.
Serialize as ADDRv2 / BIP155.
Definition at line 375 of file netaddress.h.
|
private |
Parse an I2P address and set this object to it.
| [in] | addr | Address to parse, must be a valid C string, for example ukeu3k5oycgaauneqgtnvselmt4yemvoilkln7jpvamvfx7dnkdq.b32.i2p. |
Definition at line 263 of file netaddress.cpp.
| bool CNetAddr::SetInternal | ( | const std::string & | name | ) |
Create an "internal" address that represents a name or FQDN.
AddrMan uses these fake addresses to keep track of which DNS seeds were used.
Definition at line 173 of file netaddress.cpp.
Definition at line 107 of file netaddress.cpp.
Set from a legacy IPv6 address.
Legacy IPv6 address may be a normal IPv6 address, or another address (e.g. IPv4) disguised as IPv6. This encoding is used in the legacy addr encoding.
Definition at line 138 of file netaddress.cpp.
Set m_net from the provided BIP155 network id and size after validation.
| true | the network was recognized, is valid and m_net was set |
| false | not recognised (from future?) and should be silently ignored |
| std::ios_base::failure | if the network is one of the BIP155 founding networks (id 1..6) with wrong address size. |
Definition at line 49 of file netaddress.cpp.
| bool CNetAddr::SetSpecial | ( | std::string_view | addr | ) |
Parse a Tor or I2P address and set this object to it.
| [in] | addr | Address to parse, for example pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion or ukeu3k5oycgaauneqgtnvselmt4yemvoilkln7jpvamvfx7dnkdq.b32.i2p. |
Definition at line 212 of file netaddress.cpp.
|
private |
Parse a Tor address and set this object to it.
| [in] | addr | Address to parse, must be a valid C string, for example pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion. |
Definition at line 229 of file netaddress.cpp.
| std::string CNetAddr::ToStringAddr | ( | ) | const |
Definition at line 580 of file netaddress.cpp.
Unserialize from a stream.
Definition at line 251 of file netaddress.h.
Unserialize from a pre-ADDRv2/BIP155 format from an array.
This function is only called from UnserializeV1Stream() and is a wrapper for SetLegacyIPv6(); however, we keep it for symmetry with SerializeV1Array() to have pairs of ser/unser functions and to make clear that if one is altered, a corresponding reverse modification should be applied to the other.
Definition at line 399 of file netaddress.h.
Unserialize from a pre-ADDRv2/BIP155 format from a stream.
Definition at line 410 of file netaddress.h.
Unserialize from a ADDRv2 / BIP155 format.
Definition at line 423 of file netaddress.h.
Definition at line 272 of file netaddress.h.
Definition at line 608 of file netaddress.cpp.
Definition at line 603 of file netaddress.cpp.
|
protected |
Raw representation of the network address.
In network byte order (big endian) for IPv4 and IPv6.
Definition at line 119 of file netaddress.h.
Network to which this address belongs.
Definition at line 124 of file netaddress.h.
|
protected |
Scope id if scoped/link-local IPV6 address.
See https://tools.ietf.org/html/rfc4007
Definition at line 130 of file netaddress.h.
Maximum size of an address as defined in BIP155 (in bytes).
This is only the size of the address, not the entire CNetAddr object when serialized.
Definition at line 303 of file netaddress.h.
Definition at line 231 of file netaddress.h.
|
staticconstexprprivate |
Size of CNetAddr when serialized as ADDRv1 (pre-BIP155) (in bytes).
Definition at line 296 of file netaddress.h.
Definition at line 232 of file netaddress.h.