|
|
|
@ -600,6 +600,40 @@ namespace llarp
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if !defined(TESTNET)
|
|
|
|
|
static constexpr std::array bogonRanges_v6 = {
|
|
|
|
|
// zero
|
|
|
|
|
IPRange{huint128_t{0}, netmask_ipv6_bits(128)},
|
|
|
|
|
// loopback
|
|
|
|
|
IPRange{huint128_t{1}, netmask_ipv6_bits(128)},
|
|
|
|
|
// yggdrasil
|
|
|
|
|
IPRange{huint128_t{uint128_t{0x0200'0000'0000'0000UL, 0UL}}, netmask_ipv6_bits(7)},
|
|
|
|
|
// multicast
|
|
|
|
|
IPRange{huint128_t{uint128_t{0xff00'0000'0000'0000UL, 0UL}}, netmask_ipv6_bits(8)},
|
|
|
|
|
// local
|
|
|
|
|
IPRange{huint128_t{uint128_t{0xfc00'0000'0000'0000UL, 0UL}}, netmask_ipv6_bits(8)},
|
|
|
|
|
// local
|
|
|
|
|
IPRange{huint128_t{uint128_t{0xf800'0000'0000'0000UL, 0UL}}, netmask_ipv6_bits(8)}};
|
|
|
|
|
|
|
|
|
|
static constexpr std::array bogonRanges_v4 = {
|
|
|
|
|
IPRange::FromIPv4(0, 0, 0, 0, 8),
|
|
|
|
|
IPRange::FromIPv4(10, 0, 0, 0, 8),
|
|
|
|
|
IPRange::FromIPv4(100, 64, 0, 0, 10),
|
|
|
|
|
IPRange::FromIPv4(127, 0, 0, 0, 8),
|
|
|
|
|
IPRange::FromIPv4(169, 254, 0, 0, 16),
|
|
|
|
|
IPRange::FromIPv4(172, 16, 0, 0, 12),
|
|
|
|
|
IPRange::FromIPv4(192, 0, 0, 0, 24),
|
|
|
|
|
IPRange::FromIPv4(192, 0, 2, 0, 24),
|
|
|
|
|
IPRange::FromIPv4(192, 88, 99, 0, 24),
|
|
|
|
|
IPRange::FromIPv4(192, 168, 0, 0, 16),
|
|
|
|
|
IPRange::FromIPv4(198, 18, 0, 0, 15),
|
|
|
|
|
IPRange::FromIPv4(198, 51, 100, 0, 24),
|
|
|
|
|
IPRange::FromIPv4(203, 0, 113, 0, 24),
|
|
|
|
|
IPRange::FromIPv4(224, 0, 0, 0, 4),
|
|
|
|
|
IPRange::FromIPv4(240, 0, 0, 0, 4)};
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
IsBogon(const in6_addr& addr)
|
|
|
|
|
{
|
|
|
|
@ -607,11 +641,14 @@ namespace llarp
|
|
|
|
|
(void)addr;
|
|
|
|
|
return false;
|
|
|
|
|
#else
|
|
|
|
|
if (!ipv6_is_mapped_ipv4(addr))
|
|
|
|
|
if (not ipv6_is_mapped_ipv4(addr))
|
|
|
|
|
{
|
|
|
|
|
static in6_addr zero = {};
|
|
|
|
|
if (addr == zero)
|
|
|
|
|
return true;
|
|
|
|
|
const auto ip = net::In6ToHUInt(addr);
|
|
|
|
|
for (const auto& range : bogonRanges_v6)
|
|
|
|
|
{
|
|
|
|
|
if (range.Contains(ip))
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return IsIPv4Bogon(
|
|
|
|
@ -636,28 +673,10 @@ namespace llarp
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if !defined(TESTNET)
|
|
|
|
|
static constexpr std::array bogonRanges = {
|
|
|
|
|
IPRange::FromIPv4(0, 0, 0, 0, 8),
|
|
|
|
|
IPRange::FromIPv4(10, 0, 0, 0, 8),
|
|
|
|
|
IPRange::FromIPv4(21, 0, 0, 0, 8),
|
|
|
|
|
IPRange::FromIPv4(100, 64, 0, 0, 10),
|
|
|
|
|
IPRange::FromIPv4(127, 0, 0, 0, 8),
|
|
|
|
|
IPRange::FromIPv4(169, 254, 0, 0, 16),
|
|
|
|
|
IPRange::FromIPv4(172, 16, 0, 0, 12),
|
|
|
|
|
IPRange::FromIPv4(192, 0, 0, 0, 24),
|
|
|
|
|
IPRange::FromIPv4(192, 0, 2, 0, 24),
|
|
|
|
|
IPRange::FromIPv4(192, 88, 99, 0, 24),
|
|
|
|
|
IPRange::FromIPv4(192, 168, 0, 0, 16),
|
|
|
|
|
IPRange::FromIPv4(198, 18, 0, 0, 15),
|
|
|
|
|
IPRange::FromIPv4(198, 51, 100, 0, 24),
|
|
|
|
|
IPRange::FromIPv4(203, 0, 113, 0, 24),
|
|
|
|
|
IPRange::FromIPv4(224, 0, 0, 0, 4),
|
|
|
|
|
IPRange::FromIPv4(240, 0, 0, 0, 4)};
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
IsIPv4Bogon(const huint32_t& addr)
|
|
|
|
|
{
|
|
|
|
|
for (const auto& bogon : bogonRanges)
|
|
|
|
|
for (const auto& bogon : bogonRanges_v4)
|
|
|
|
|
{
|
|
|
|
|
if (bogon.Contains(addr))
|
|
|
|
|
{
|
|
|
|
|