net.i2p.router
Class Blocklist

java.lang.Object
  extended by net.i2p.router.Blocklist

public class Blocklist
extends java.lang.Object

Manage blocking by IP address, in a manner similar to the Shitlist, which blocks by router hash. We also try to keep the two lists in sync: if a router at a given IP is blocked, we will also shitlist it "forever" (until the next reboot). While the reverse case (blocking the IP of a router shitlisted forever) is not automatic, the transports will call add() below to block the IP, which allows the transports to terminate an inbound connection before the router ident handshake. And the on-disk blocklist can also contain router hashes to be shitlisted. So, this class maintains three separate lists: 1) The list of IP ranges, read in from a file at startup 2) The list of hashes, read in from the same file 3) A list of single IPs, initially empty, added to as needed Read in the IP blocklist from a file, store it in-memory as efficiently as we can, and perform tests against it as requested. When queried for a peer that is blocklisted but isn't shitlisted, shitlist it forever, then go back to the file to get the original entry so we can add the reason to the shitlist text.


Field Summary
(package private) static java.lang.String BLOCKLIST_FILE_DEFAULT
           
(package private) static java.lang.String PROP_BLOCKLIST_DETAIL
           
(package private) static java.lang.String PROP_BLOCKLIST_ENABLED
           
(package private) static java.lang.String PROP_BLOCKLIST_FILE
           
 
Constructor Summary
Blocklist()
           
Blocklist(RouterContext context)
           
 
Method Summary
 void add(byte[] ip)
           
 void add(java.lang.String ip)
           
 void disable()
           
 java.util.List<byte[]> getAddresses(Hash peer)
          this tries to not return duplicates but I suppose it could.
 boolean isBlocklisted(byte[] ip)
           
 boolean isBlocklisted(Hash peer)
          Does the peer's IP address appear in the blocklist?
 boolean isBlocklisted(java.lang.String ip)
           
static void main(java.lang.String[] args)
           
 void renderStatusHTML(java.io.Writer out)
          write directly to the stream so we don't OOM on a huge list
 void shitlist(Hash peer)
          We don't keep the comment field in-memory, so we have to go back out to the file to find it.
 void startup()
           
static java.lang.String toStr(byte[] ip)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PROP_BLOCKLIST_ENABLED

static final java.lang.String PROP_BLOCKLIST_ENABLED
See Also:
Constant Field Values

PROP_BLOCKLIST_DETAIL

static final java.lang.String PROP_BLOCKLIST_DETAIL
See Also:
Constant Field Values

PROP_BLOCKLIST_FILE

static final java.lang.String PROP_BLOCKLIST_FILE
See Also:
Constant Field Values

BLOCKLIST_FILE_DEFAULT

static final java.lang.String BLOCKLIST_FILE_DEFAULT
See Also:
Constant Field Values
Constructor Detail

Blocklist

public Blocklist(RouterContext context)

Blocklist

public Blocklist()
Method Detail

startup

public void startup()

disable

public void disable()

add

public void add(java.lang.String ip)

add

public void add(byte[] ip)

getAddresses

public java.util.List<byte[]> getAddresses(Hash peer)
this tries to not return duplicates but I suppose it could.


isBlocklisted

public boolean isBlocklisted(Hash peer)
Does the peer's IP address appear in the blocklist? If so, and it isn't shitlisted, shitlist it forever...


isBlocklisted

public boolean isBlocklisted(java.lang.String ip)

isBlocklisted

public boolean isBlocklisted(byte[] ip)

toStr

public static java.lang.String toStr(byte[] ip)

shitlist

public void shitlist(Hash peer)
We don't keep the comment field in-memory, so we have to go back out to the file to find it. Put this in a job because we're looking for the actual line in the blocklist file, this could take a while.


renderStatusHTML

public void renderStatusHTML(java.io.Writer out)
                      throws java.io.IOException
write directly to the stream so we don't OOM on a huge list

Throws:
java.io.IOException

main

public static void main(java.lang.String[] args)