Bitcoin Core 32.99.0
P2P Digital Currency
netaddress.cpp
Go to the documentation of this file.
1// Copyright (c) 2020-present The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#include <netaddress.h>
7#include <test/fuzz/fuzz.h>
9#include <test/util/random.h>
10
11#include <cassert>
12#include <cstdint>
13#include <vector>
14
15FUZZ_TARGET(netaddress)
16{
18 FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
19
21 (void)net_addr.GetNetClass();
22 if (net_addr.GetNetwork() == Network::NET_IPV4) {
23 assert(net_addr.IsIPv4());
24 }
25 if (net_addr.GetNetwork() == Network::NET_IPV6) {
26 assert(net_addr.IsIPv6());
27 }
28 if (net_addr.GetNetwork() == Network::NET_ONION) {
29 assert(net_addr.IsTor());
30 }
31 if (net_addr.GetNetwork() == Network::NET_I2P) {
32 assert(net_addr.IsI2P());
33 }
34 if (net_addr.GetNetwork() == Network::NET_CJDNS) {
35 assert(net_addr.IsCJDNS());
36 }
37 if (net_addr.GetNetwork() == Network::NET_INTERNAL) {
38 assert(net_addr.IsInternal());
39 }
40 if (net_addr.GetNetwork() == Network::NET_UNROUTABLE) {
41 assert(!net_addr.IsRoutable());
42 }
43 (void)net_addr.IsBindAny();
44 if (net_addr.IsInternal()) {
46 }
47 if (net_addr.IsIPv4()) {
49 }
50 if (net_addr.IsIPv6()) {
52 }
53 (void)net_addr.IsLocal();
54 if (net_addr.IsRFC1918() || net_addr.IsRFC2544() || net_addr.IsRFC6598() || net_addr.IsRFC5737() || net_addr.IsRFC3927()) {
55 assert(net_addr.IsIPv4());
56 }
57 (void)net_addr.IsRFC2544();
58 if (net_addr.IsRFC3849() || net_addr.IsRFC3964() || net_addr.IsRFC4380() || net_addr.IsRFC4843() || net_addr.IsRFC7343() || net_addr.IsRFC4862() || net_addr.IsRFC6052() || net_addr.IsRFC6145() || net_addr.IsRFC9637()) {
59 assert(net_addr.IsIPv6());
60 }
61 (void)net_addr.IsRFC3927();
62 (void)net_addr.IsRFC3964();
63 if (net_addr.IsRFC4193()) {
65 }
66 (void)net_addr.IsRFC4380();
67 (void)net_addr.IsRFC4843();
68 (void)net_addr.IsRFC4862();
69 (void)net_addr.IsRFC5737();
70 (void)net_addr.IsRFC6052();
71 (void)net_addr.IsRFC6145();
72 (void)net_addr.IsRFC6598();
73 (void)net_addr.IsRFC7343();
74 (void)net_addr.IsRFC9637();
75 const bool routable{net_addr.IsRoutable()};
76 if (!routable) {
78 }
79 if (net_addr.IsTor()) {
81 }
82 if (net_addr.IsI2P()) {
83 assert(net_addr.GetNetwork() == Network::NET_I2P);
84 }
85 if (net_addr.IsCJDNS()) {
87 }
88 if (!net_addr.IsValid()) {
89 assert(!routable);
90 }
91 (void)net_addr.ToStringAddr();
92
93 const CSubNet sub_net{net_addr, fuzzed_data_provider.ConsumeIntegral<uint8_t>()};
94 (void)sub_net.IsValid();
95 (void)sub_net.ToString();
96
97 const CService service{net_addr, fuzzed_data_provider.ConsumeIntegral<uint16_t>()};
98 (void)service.GetKey();
99 (void)service.GetPort();
100 (void)service.ToStringAddrPort();
101 (void)CServiceHash()(service);
102 (void)CServiceHash(0, 0)(service);
103
104 const CNetAddr other_net_addr = ConsumeNetAddr(fuzzed_data_provider);
105 (void)net_addr.GetReachabilityFrom(other_net_addr);
106 (void)sub_net.Match(other_net_addr);
107
108 const CService other_service{fuzzed_data_provider.ConsumeBool() ? net_addr : other_net_addr, fuzzed_data_provider.ConsumeIntegral<uint16_t>()};
109 assert((service == other_service) != (service != other_service));
110 (void)(service < other_service);
111
112 if (service.ToStringAddrPort() == other_service.ToStringAddrPort()) {
113 assert(static_cast<CNetAddr>(service) == static_cast<CNetAddr>(other_service));
114 }
115
116 const CSubNet sub_net_copy_1{net_addr, other_net_addr};
117 const CSubNet sub_net_copy_2{net_addr};
118
119 CNetAddr mutable_net_addr;
120 mutable_net_addr.SetIP(net_addr);
121 assert(net_addr == mutable_net_addr);
122}
Network address.
Definition: netaddress.h:113
Network GetNetClass() const
Definition: netaddress.cpp:680
std::string ToStringAddr() const
Definition: netaddress.cpp:586
bool IsBindAny() const
Definition: netaddress.cpp:303
bool IsRFC6052() const
Definition: netaddress.cpp:357
void SetIP(const CNetAddr &ip)
Definition: netaddress.cpp:107
bool IsRFC7343() const
Definition: netaddress.cpp:393
bool IsCJDNS() const
Definition: netaddress.h:178
bool IsTor() const
Definition: netaddress.h:176
bool IsRoutable() const
Definition: netaddress.cpp:468
bool IsRFC5737() const
Definition: netaddress.cpp:334
bool IsRFC6598() const
Definition: netaddress.cpp:329
bool IsRFC1918() const
Definition: netaddress.cpp:311
bool IsValid() const
Definition: netaddress.cpp:430
bool IsIPv4() const
Definition: netaddress.h:158
bool IsRFC3849() const
Definition: netaddress.cpp:341
bool IsLocal() const
Definition: netaddress.cpp:404
bool IsIPv6() const
Definition: netaddress.h:159
bool IsInternal() const
Definition: netaddress.cpp:478
bool IsRFC4193() const
Definition: netaddress.cpp:375
bool IsRFC2544() const
Definition: netaddress.cpp:319
enum Network GetNetwork() const
Definition: netaddress.cpp:502
bool IsRFC6145() const
Definition: netaddress.cpp:380
int GetReachabilityFrom(const CNetAddr &paddrPartner) const
Calculates a metric for how reachable (*this) is from a given partner.
Definition: netaddress.cpp:719
bool IsRFC9637() const
Definition: netaddress.cpp:346
bool IsRFC3964() const
Definition: netaddress.cpp:352
bool IsRFC4380() const
Definition: netaddress.cpp:364
bool IsRFC3927() const
Definition: netaddress.cpp:324
bool IsRFC4862() const
Definition: netaddress.cpp:369
bool IsRFC4843() const
Definition: netaddress.cpp:387
bool IsI2P() const
Definition: netaddress.h:177
A combination of a network address (CNetAddr) and a (TCP) port.
Definition: netaddress.h:531
@ NET_I2P
I2P.
Definition: netaddress.h:47
@ NET_CJDNS
CJDNS.
Definition: netaddress.h:50
@ NET_ONION
TOR (v2 or v3)
Definition: netaddress.h:44
@ NET_IPV6
IPv6.
Definition: netaddress.h:41
@ NET_IPV4
IPv4.
Definition: netaddress.h:38
@ NET_UNROUTABLE
Addresses from these networks are not publicly routable on the global Internet.
Definition: netaddress.h:35
@ NET_INTERNAL
A set of addresses that represent the hash of a string or FQDN.
Definition: netaddress.h:54
SeedRandomStateForTest(SeedRand::ZEROS)
FUZZ_TARGET(netaddress)
Definition: netaddress.cpp:15
CNetAddr ConsumeNetAddr(FuzzedDataProvider &fuzzed_data_provider, FastRandomContext *rand) noexcept
Create a CNetAddr.
Definition: net.cpp:29
@ ZEROS
Seed with a compile time constant of zeros.
assert(!tx.IsCoinBase())
FuzzedDataProvider & fuzzed_data_provider
Definition: fees.cpp:45