Browse Source

Don't use reversed port for choise random port. (by whothefuckami)

pull/1879/head
weko 2 years ago
parent
commit
9e0c5d67c7
  1. 8
      libi2pd/RouterContext.cpp
  2. 16
      libi2pd/util.cpp
  3. 1
      libi2pd/util.h

8
libi2pd/RouterContext.cpp

@ -202,7 +202,13 @@ namespace i2p
uint16_t RouterContext::SelectRandomPort () const uint16_t RouterContext::SelectRandomPort () const
{ {
uint16_t port = rand () % (30777 - 9111) + 9111; // I2P network ports range uint16_t port;
do
{
port = rand () % (30777 - 9111) + 9111; // I2P network ports range
}
while(i2p::util::net::IsPortInReservedRange(port));
if (port == 9150) port = 9151; // Tor browser if (port == 9150) port = 9151; // Tor browser
return port; return port;
} }

16
libi2pd/util.cpp

@ -8,6 +8,7 @@
#include <cstdlib> #include <cstdlib>
#include <string> #include <string>
#include <unordered_set>
#include <boost/asio.hpp> #include <boost/asio.hpp>
#include "util.h" #include "util.h"
@ -487,6 +488,21 @@ namespace net
return IsYggdrasilAddress (addr.to_v6 ().to_bytes ().data ()); return IsYggdrasilAddress (addr.to_v6 ().to_bytes ().data ());
} }
bool IsPortInReservedRange (const uint16_t port) noexcept
{
static const std::unordered_set<uint16_t> reservedPorts{
9119,9306,9312,9389,9418,9535,9536,9695,
9800,9899,10000,10050,10051,10110,10212,
10933,11001,11112,11235,11371,12222,12223,
13075,13400,13720,13721,13724,13782,13783,
13785,13786,15345,17224,17225,17500,18104,
19788,19812,19813,19814,19999,20000,24465,
24554,26000,27000,27001,27002,27003,27004,
27005,27006,27007,27008,27009,28000};
return (reservedPorts.find(port) != reservedPorts.end());
}
boost::asio::ip::address_v6 GetYggdrasilAddress () boost::asio::ip::address_v6 GetYggdrasilAddress ()
{ {
#if defined(_WIN32) #if defined(_WIN32)

1
libi2pd/util.h

@ -224,6 +224,7 @@ namespace util
bool IsLocalAddress (const boost::asio::ip::address& addr); bool IsLocalAddress (const boost::asio::ip::address& addr);
bool IsInReservedRange (const boost::asio::ip::address& host); bool IsInReservedRange (const boost::asio::ip::address& host);
bool IsYggdrasilAddress (const boost::asio::ip::address& addr); bool IsYggdrasilAddress (const boost::asio::ip::address& addr);
bool IsPortInReservedRange (const uint16_t port) noexcept;
} }
} }
} }

Loading…
Cancel
Save