From 3846e08e68ca2e3abb66b2532c9794ad59e1db1d Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Thu, 22 Dec 2016 12:46:38 +0000 Subject: [PATCH] Router: More efficiently check blocklist when receiving new RI --- router/java/src/net/i2p/router/Blocklist.java | 41 ++++++++++++++++--- ...andleFloodfillDatabaseStoreMessageJob.java | 4 +- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/router/java/src/net/i2p/router/Blocklist.java b/router/java/src/net/i2p/router/Blocklist.java index 5b78e3c930..1ae393ff75 100644 --- a/router/java/src/net/i2p/router/Blocklist.java +++ b/router/java/src/net/i2p/router/Blocklist.java @@ -79,6 +79,12 @@ public class Blocklist { private final File _blocklistFeedFile; // temp private Map<Hash, String> _peerBlocklist = new HashMap<Hash, String>(4); + + private static final String PROP_BLOCKLIST_ENABLED = "router.blocklist.enable"; + private static final String PROP_BLOCKLIST_DETAIL = "router.blocklist.detail"; + private static final String PROP_BLOCKLIST_FILE = "router.blocklist.file"; + private static final String BLOCKLIST_FILE_DEFAULT = "blocklist.txt"; + private static final String BLOCKLIST_FEED_FILE = "docs/feed/blocklist/blocklist.txt"; /** * Limits of transient (in-memory) blocklists. @@ -105,12 +111,6 @@ public class Blocklist { _log = new Log(Blocklist.class); _blocklistFeedFile = new File(BLOCKLIST_FEED_FILE); } - - private static final String PROP_BLOCKLIST_ENABLED = "router.blocklist.enable"; - private static final String PROP_BLOCKLIST_DETAIL = "router.blocklist.detail"; - private static final String PROP_BLOCKLIST_FILE = "router.blocklist.file"; - private static final String BLOCKLIST_FILE_DEFAULT = "blocklist.txt"; - private static final String BLOCKLIST_FEED_FILE = "docs/feed/blocklist/blocklist.txt"; /** * Loads the following files in-order: @@ -656,6 +656,14 @@ public class Blocklist { RouterInfo pinfo = _context.netDb().lookupRouterInfoLocally(peer); if (pinfo == null) return Collections.emptyList(); + return getAddresses(pinfo); + } + + /** + * Will not contain duplicates. + * @since 0.9.29 + */ + private static List<byte[]> getAddresses(RouterInfo pinfo) { List<byte[]> rv = new ArrayList<byte[]>(4); // for each peer address for (RouterAddress pa : pinfo.getAddresses()) { @@ -694,6 +702,27 @@ public class Blocklist { return false; } + /** + * Does the peer's IP address appear in the blocklist? + * If so, and it isn't banlisted, banlist it forever... + * @since 0.9.29 + */ + public boolean isBlocklisted(RouterInfo pinfo) { + List<byte[]> ips = getAddresses(pinfo); + if (ips.isEmpty()) + return false; + for (byte[] ip : ips) { + if (isBlocklisted(ip)) { + Hash peer = pinfo.getHash(); + if (! _context.banlist().isBanlisted(peer)) + // nice knowing you... + banlist(peer, ip); + return true; + } + } + return false; + } + /** * calling this externally won't banlist the peer, this is just an IP check * diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java index 56fd1f0eb8..d136843f61 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java @@ -160,7 +160,7 @@ public class HandleFloodfillDatabaseStoreMessageJob extends JobImpl { if (wasNew) { if (prevNetDb == null) { if ((!getContext().banlist().isBanlistedForever(key)) && - getContext().blocklist().isBlocklisted(key) && + getContext().blocklist().isBlocklisted(ri) && _log.shouldLog(Log.WARN)) _log.warn("Blocklisting new peer " + key + ' ' + ri); } else { @@ -168,7 +168,7 @@ public class HandleFloodfillDatabaseStoreMessageJob extends JobImpl { Collection<RouterAddress> newAddr = ri.getAddresses(); if ((!newAddr.equals(oldAddr)) && (!getContext().banlist().isBanlistedForever(key)) && - getContext().blocklist().isBlocklisted(key) && + getContext().blocklist().isBlocklisted(ri) && _log.shouldLog(Log.WARN)) _log.warn("New address received, Blocklisting old peer " + key + ' ' + ri); } -- GitLab