From a74f685a5d262a2e66972f47879460f09a52476f Mon Sep 17 00:00:00 2001 From: orignal Date: Tue, 2 Feb 2021 19:29:13 -0500 Subject: [PATCH] check local address --- daemon/Daemon.cpp | 3 ++- libi2pd/util.cpp | 11 +++++++++++ libi2pd/util.h | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/daemon/Daemon.cpp b/daemon/Daemon.cpp index 70c4affc..80d56651 100644 --- a/daemon/Daemon.cpp +++ b/daemon/Daemon.cpp @@ -152,7 +152,8 @@ namespace i2p if (!yggaddress.empty ()) { yggaddr = boost::asio::ip::address_v6::from_string (yggaddress); - if (yggaddr.is_unspecified () || i2p::util::net::GetMTU (yggaddr) != 0xFFFF) // ygg's MTU is always 65535 + if (yggaddr.is_unspecified () || !i2p::util::net::IsYggdrasilAddress (yggaddr) || + !i2p::util::net::IsLocalAddress (yggaddr)) { LogPrint(eLogWarning, "Daemon: Can't find Yggdrasil address ", yggaddress); ygg = false; diff --git a/libi2pd/util.cpp b/libi2pd/util.cpp index f9beacf0..22530a70 100644 --- a/libi2pd/util.cpp +++ b/libi2pd/util.cpp @@ -461,6 +461,17 @@ namespace net #endif } + bool IsLocalAddress (const boost::asio::ip::address& addr) + { + auto mtu = // TODO: implement better +#ifdef _WIN32 + GetMTUWindows(addr, 0); +#else + GetMTUUnix(addr, 0); +#endif + return mtu > 0; + } + bool IsInReservedRange (const boost::asio::ip::address& host) { // https://en.wikipedia.org/wiki/Reserved_IP_addresses diff --git a/libi2pd/util.h b/libi2pd/util.h index d4b9da51..0cab4121 100644 --- a/libi2pd/util.h +++ b/libi2pd/util.h @@ -189,6 +189,7 @@ namespace util int GetMTU (const boost::asio::ip::address& localAddress); const boost::asio::ip::address GetInterfaceAddress (const std::string & ifname, bool ipv6=false); boost::asio::ip::address_v6 GetYggdrasilAddress (); + bool IsLocalAddress (const boost::asio::ip::address& addr); bool IsInReservedRange (const boost::asio::ip::address& host); bool IsYggdrasilAddress (const boost::asio::ip::address& addr); }