mirror of
https://github.com/monero-project/monero.git
synced 2026-01-27 15:25:37 -08:00
allow blocking whole subnets
This commit is contained in:
@@ -1786,6 +1786,46 @@ namespace cryptonote
|
||||
res.bans.push_back(b);
|
||||
}
|
||||
}
|
||||
std::map<epee::net_utils::ipv4_network_subnet, time_t> blocked_subnets = m_p2p.get_blocked_subnets();
|
||||
for (std::map<epee::net_utils::ipv4_network_subnet, time_t>::const_iterator i = blocked_subnets.begin(); i != blocked_subnets.end(); ++i)
|
||||
{
|
||||
if (i->second > now) {
|
||||
COMMAND_RPC_GETBANS::ban b;
|
||||
b.host = i->first.host_str();
|
||||
b.ip = 0;
|
||||
b.seconds = i->second - now;
|
||||
res.bans.push_back(b);
|
||||
}
|
||||
}
|
||||
|
||||
res.status = CORE_RPC_STATUS_OK;
|
||||
return true;
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------------------------
|
||||
bool core_rpc_server::on_banned(const COMMAND_RPC_BANNED::request& req, COMMAND_RPC_BANNED::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx)
|
||||
{
|
||||
PERF_TIMER(on_banned);
|
||||
|
||||
auto na_parsed = net::get_network_address(req.address, 0);
|
||||
if (!na_parsed)
|
||||
{
|
||||
error_resp.code = CORE_RPC_ERROR_CODE_WRONG_PARAM;
|
||||
error_resp.message = "Unsupported host type";
|
||||
return false;
|
||||
}
|
||||
epee::net_utils::network_address na = std::move(*na_parsed);
|
||||
|
||||
time_t seconds;
|
||||
if (m_p2p.is_host_blocked(na, &seconds))
|
||||
{
|
||||
res.banned = true;
|
||||
res.seconds = seconds;
|
||||
}
|
||||
else
|
||||
{
|
||||
res.banned = false;
|
||||
res.seconds = 0;
|
||||
}
|
||||
|
||||
res.status = CORE_RPC_STATUS_OK;
|
||||
return true;
|
||||
@@ -1798,13 +1838,29 @@ namespace cryptonote
|
||||
for (auto i = req.bans.begin(); i != req.bans.end(); ++i)
|
||||
{
|
||||
epee::net_utils::network_address na;
|
||||
|
||||
// try subnet first
|
||||
if (!i->host.empty())
|
||||
{
|
||||
auto ns_parsed = net::get_ipv4_subnet_address(i->host);
|
||||
if (ns_parsed)
|
||||
{
|
||||
if (i->ban)
|
||||
m_p2p.block_subnet(*ns_parsed, i->seconds);
|
||||
else
|
||||
m_p2p.unblock_subnet(*ns_parsed);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// then host
|
||||
if (!i->host.empty())
|
||||
{
|
||||
auto na_parsed = net::get_network_address(i->host, 0);
|
||||
if (!na_parsed)
|
||||
{
|
||||
error_resp.code = CORE_RPC_ERROR_CODE_WRONG_PARAM;
|
||||
error_resp.message = "Unsupported host type";
|
||||
error_resp.message = "Unsupported host/subnet type";
|
||||
return false;
|
||||
}
|
||||
na = std::move(*na_parsed);
|
||||
|
||||
Reference in New Issue
Block a user