[RPC] add setban/listbanned/clearbanned RPC commands
This commit is contained in:
parent
2252fb91cd
commit
d930b26a26
@ -93,6 +93,7 @@ static const CRPCConvertParam vRPCConvertParams[] =
|
|||||||
{ "estimatepriority", 0 },
|
{ "estimatepriority", 0 },
|
||||||
{ "prioritisetransaction", 1 },
|
{ "prioritisetransaction", 1 },
|
||||||
{ "prioritisetransaction", 2 },
|
{ "prioritisetransaction", 2 },
|
||||||
|
{ "setban", 2 },
|
||||||
};
|
};
|
||||||
|
|
||||||
class CRPCConvertTable
|
class CRPCConvertTable
|
||||||
|
@ -465,3 +465,92 @@ UniValue getnetworkinfo(const UniValue& params, bool fHelp)
|
|||||||
obj.push_back(Pair("warnings", GetWarnings("statusbar")));
|
obj.push_back(Pair("warnings", GetWarnings("statusbar")));
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Value setban(const Array& params, bool fHelp)
|
||||||
|
{
|
||||||
|
string strCommand;
|
||||||
|
if (params.size() >= 2)
|
||||||
|
strCommand = params[1].get_str();
|
||||||
|
if (fHelp || params.size() < 2 ||
|
||||||
|
(strCommand != "add" && strCommand != "remove"))
|
||||||
|
throw runtime_error(
|
||||||
|
"setban \"node\" \"add|remove\" (bantime)\n"
|
||||||
|
"\nAttempts add or remove a IP from the banned list.\n"
|
||||||
|
"\nArguments:\n"
|
||||||
|
"1. \"ip\" (string, required) The IP (see getpeerinfo for nodes ip)\n"
|
||||||
|
"2. \"command\" (string, required) 'add' to add a IP to the list, 'remove' to remove a IP from the list\n"
|
||||||
|
"1. \"bantime\" (numeric, optional) time in seconds how long the ip is banned (0 or empty means using the default time of 24h which can also be overwritten by the -bantime startup argument)\n"
|
||||||
|
"\nExamples:\n"
|
||||||
|
+ HelpExampleCli("setban", "\"192.168.0.6\" \"add\" 86400")
|
||||||
|
+ HelpExampleRpc("setban", "\"192.168.0.6\", \"add\" 86400")
|
||||||
|
);
|
||||||
|
|
||||||
|
CNetAddr netAddr(params[0].get_str());
|
||||||
|
if (!netAddr.IsValid())
|
||||||
|
throw JSONRPCError(RPC_CLIENT_NODE_ALREADY_ADDED, "Error: Invalid IP Address");
|
||||||
|
|
||||||
|
if (strCommand == "add")
|
||||||
|
{
|
||||||
|
if (CNode::IsBanned(netAddr))
|
||||||
|
throw JSONRPCError(RPC_CLIENT_NODE_ALREADY_ADDED, "Error: IP already banned");
|
||||||
|
|
||||||
|
int64_t banTime = 0; //use standard bantime if not specified
|
||||||
|
if (params.size() == 3 && !params[2].is_null())
|
||||||
|
banTime = params[2].get_int64();
|
||||||
|
|
||||||
|
CNode::Ban(netAddr, banTime);
|
||||||
|
|
||||||
|
//disconnect possible nodes
|
||||||
|
while(CNode *bannedNode = FindNode(netAddr))
|
||||||
|
bannedNode->CloseSocketDisconnect();
|
||||||
|
}
|
||||||
|
else if(strCommand == "remove")
|
||||||
|
{
|
||||||
|
if (!CNode::Unban(netAddr))
|
||||||
|
throw JSONRPCError(RPC_CLIENT_NODE_ALREADY_ADDED, "Error: Unban failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
return Value::null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Value listbanned(const Array& params, bool fHelp)
|
||||||
|
{
|
||||||
|
if (fHelp || params.size() != 0)
|
||||||
|
throw runtime_error(
|
||||||
|
"listbanned\n"
|
||||||
|
"\nList all banned IPs.\n"
|
||||||
|
"\nExamples:\n"
|
||||||
|
+ HelpExampleCli("listbanned", "")
|
||||||
|
+ HelpExampleRpc("listbanned", "")
|
||||||
|
);
|
||||||
|
|
||||||
|
std::map<CNetAddr, int64_t> banMap;
|
||||||
|
CNode::GetBanned(banMap);
|
||||||
|
|
||||||
|
Array bannedAddresses;
|
||||||
|
for (std::map<CNetAddr, int64_t>::iterator it = banMap.begin(); it != banMap.end(); it++)
|
||||||
|
{
|
||||||
|
Object rec;
|
||||||
|
rec.push_back(Pair("address", (*it).first.ToString()));
|
||||||
|
rec.push_back(Pair("bannedtill", (*it).second));
|
||||||
|
bannedAddresses.push_back(rec);
|
||||||
|
}
|
||||||
|
|
||||||
|
return bannedAddresses;
|
||||||
|
}
|
||||||
|
|
||||||
|
Value clearbanned(const Array& params, bool fHelp)
|
||||||
|
{
|
||||||
|
if (fHelp || params.size() != 0)
|
||||||
|
throw runtime_error(
|
||||||
|
"clearbanned\n"
|
||||||
|
"\nClear all banned IPs.\n"
|
||||||
|
"\nExamples:\n"
|
||||||
|
+ HelpExampleCli("clearbanned", "")
|
||||||
|
+ HelpExampleRpc("clearbanned", "")
|
||||||
|
);
|
||||||
|
|
||||||
|
CNode::ClearBanned();
|
||||||
|
|
||||||
|
return Value::null;
|
||||||
|
}
|
||||||
|
@ -279,6 +279,9 @@ static const CRPCCommand vRPCCommands[] =
|
|||||||
{ "network", "getnettotals", &getnettotals, true },
|
{ "network", "getnettotals", &getnettotals, true },
|
||||||
{ "network", "getpeerinfo", &getpeerinfo, true },
|
{ "network", "getpeerinfo", &getpeerinfo, true },
|
||||||
{ "network", "ping", &ping, true },
|
{ "network", "ping", &ping, true },
|
||||||
|
{ "network", "setban", &setban, true },
|
||||||
|
{ "network", "listbanned", &listbanned, true },
|
||||||
|
{ "network", "clearbanned", &clearbanned, true },
|
||||||
|
|
||||||
/* Block chain and UTXO */
|
/* Block chain and UTXO */
|
||||||
{ "blockchain", "getblockchaininfo", &getblockchaininfo, true },
|
{ "blockchain", "getblockchaininfo", &getblockchaininfo, true },
|
||||||
|
@ -154,6 +154,9 @@ extern UniValue addnode(const UniValue& params, bool fHelp);
|
|||||||
extern UniValue disconnectnode(const UniValue& params, bool fHelp);
|
extern UniValue disconnectnode(const UniValue& params, bool fHelp);
|
||||||
extern UniValue getaddednodeinfo(const UniValue& params, bool fHelp);
|
extern UniValue getaddednodeinfo(const UniValue& params, bool fHelp);
|
||||||
extern UniValue getnettotals(const UniValue& params, bool fHelp);
|
extern UniValue getnettotals(const UniValue& params, bool fHelp);
|
||||||
|
extern UniValue setban(const json_spirit::Array& params, bool fHelp);
|
||||||
|
extern UniValue listbanned(const json_spirit::Array& params, bool fHelp);
|
||||||
|
extern UniValue clearbanned(const json_spirit::Array& params, bool fHelp);
|
||||||
|
|
||||||
extern UniValue dumpprivkey(const UniValue& params, bool fHelp); // in rpcdump.cpp
|
extern UniValue dumpprivkey(const UniValue& params, bool fHelp); // in rpcdump.cpp
|
||||||
extern UniValue importprivkey(const UniValue& params, bool fHelp);
|
extern UniValue importprivkey(const UniValue& params, bool fHelp);
|
||||||
|
Loading…
Reference in New Issue
Block a user