📄 ipfilterimpl.java
字号:
if( allow ){
addBlockedIP( new BlockedIpImpl(ipAddress.getHostAddress(),null, torrent_name, loggable), loggable );
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, LogEvent.LT_WARNING, "Ip Blocked : "
+ ipAddress + ", not in any range"));
return true;
}
return false;
}
private void
addBlockedIP(
BlockedIp ip,
boolean loggable )
{
try{ class_mon.enter();
ipsBlocked.addLast( ip );
num_ips_blocked++;
if ( loggable ){
num_ips_blocked_loggable++;
}
if( ipsBlocked.size() > MAX_BLOCKS_TO_REMEMBER ) { //only "remember" the last few blocks occurrences
ipsBlocked.removeFirst();
}
}
finally{ class_mon.exit(); }
}
private boolean
isBanned(
InetAddress ipAddress)
{
try{
class_mon.enter();
int address = range_manager.addressToInt( ipAddress );
Integer i_address = new Integer( address );
return( bannedIps.get(i_address) != null );
}finally{
class_mon.exit();
}
}
private boolean
isBanned(
String ipAddress)
{
try{
class_mon.enter();
int address = range_manager.addressToInt( ipAddress );
Integer i_address = new Integer( address );
return( bannedIps.get(i_address) != null );
}finally{
class_mon.exit();
}
}
public boolean
getInRangeAddressesAreAllowed()
{
boolean allow = COConfigurationManager.getBooleanParameter("Ip Filter Allow");
return( allow );
}
public void
setInRangeAddressesAreAllowed(
boolean b )
{
COConfigurationManager.setParameter("Ip Filter Allow", b );
}
/**
* @return
* @deprecated
*/
public List
getIpRanges()
{
try{
class_mon.enter();
return new ArrayList( range_manager.getEntries() );
}finally{
class_mon.exit();
}
}
public IpRange[]
getRanges()
{
try{
class_mon.enter();
List entries = range_manager.getEntries();
IpRange[] res = new IpRange[entries.size()];
entries.toArray( res );
return( res );
}finally{
class_mon.exit();
}
}
public IpRange
createRange(boolean sessionOnly)
{
return ( new IpRangeImpl("","","",sessionOnly));
}
public void
addRange(
IpRange range )
{
try{
class_mon.enter();
((IpRangeImpl)range).setAddedToRangeList(true);
// we only allow the validity check to take effect once its added to
// the list of all ip ranges (coz safepeer creates lots of dummy entries
// during refresh and then never adds them...
range.checkValid();
}finally{
class_mon.exit();
}
markAsUpToDate();
}
public void
removeRange(
IpRange range )
{
try{
class_mon.enter();
((IpRangeImpl)range).setAddedToRangeList( false );
range_manager.removeRange( range );
}finally{
class_mon.exit();
}
markAsUpToDate();
}
public int getNbRanges() {
List entries = range_manager.getEntries();
return entries.size();
}
protected void
setValidOrNot(
IpRangeImpl range,
boolean valid )
{
try{
class_mon.enter();
// this is an optimisation to deal with the way safepeer validates stuff
// before adding it in
if ( !range.getAddedToRangeList()){
return;
}
}finally{
class_mon.exit();
}
if ( valid ){
range_manager.addRange( range );
}else{
range_manager.removeRange( range );
}
}
public int
getNbIpsBlocked()
{
return num_ips_blocked;
}
public int
getNbIpsBlockedAndLoggable()
{
return num_ips_blocked_loggable;
}
public boolean
ban(
String ipAddress,
String torrent_name )
{
boolean block_ban = false;
List new_bans = new ArrayList();
try{
class_mon.enter();
int address = range_manager.addressToInt( ipAddress );
Integer i_address = new Integer( address );
if ( bannedIps.get(i_address) == null ){
BannedIpImpl new_ban = new BannedIpImpl( ipAddress, torrent_name );
new_bans.add( new_ban );
bannedIps.put( i_address, new_ban );
// check for block-banning, but only for real addresses
if ( !UnresolvableHostManager.isPseudoAddress( ipAddress )){
long l_address = address;
if ( l_address < 0 ){
l_address += 0x100000000L;
}
long start = l_address & 0xffffff00;
long end = start+256;
int hits = 0;
for (long i=start;i<end;i++){
Integer a = new Integer((int)i);
if ( bannedIps.get(a) != null ){
hits++;
}
}
int hit_limit = COConfigurationManager.getIntParameter("Ip Filter Ban Block Limit");
if ( hits >= hit_limit ){
block_ban = true;
for (long i=start;i<end;i++){
Integer a = new Integer((int)i);
if ( bannedIps.get(a) == null ){
BannedIpImpl new_block_ban = new BannedIpImpl( PRHelpers.intToAddress((int)i), torrent_name + " [block ban]" );
new_bans.add( new_block_ban );
bannedIps.put( a, new_block_ban );
}
}
}
}
saveBannedIPs();
}
}finally{
class_mon.exit();
}
List listeners_ref = listeners;
for (int i=0;i<new_bans.size();i++){
BannedIp entry = (BannedIp)new_bans.get(i);
for (int j=0;j<listeners_ref.size();j++){
try{
((IPFilterListener)listeners_ref.get(j)).IPBanned( entry );
}catch( Throwable e ){
Debug.printStackTrace(e);
}
}
}
return( block_ban );
}
public BannedIp[]
getBannedIps()
{
try{
class_mon.enter();
BannedIp[] res = new BannedIp[bannedIps.size()];
bannedIps.values().toArray(res);
return( res );
}finally{
class_mon.exit();
}
}
public int
getNbBannedIps()
{
return( bannedIps.size());
}
public void
clearBannedIps()
{
try{
class_mon.enter();
bannedIps.clear();
saveBannedIPs();
}finally{
class_mon.exit();
}
}
public void
unban(String ipAddress)
{
try{
class_mon.enter();
int address = range_manager.addressToInt( ipAddress );
Integer i_address = new Integer( address );
bannedIps.remove(i_address);
saveBannedIPs();
}finally{
class_mon.exit();
}
}
public BlockedIp[]
getBlockedIps()
{
try{
class_mon.enter();
BlockedIp[] res = new BlockedIp[ipsBlocked.size()];
ipsBlocked.toArray(res);
return( res );
}finally{
class_mon.exit();
}
}
public void
clearBlockedIPs()
{
try{
class_mon.enter();
ipsBlocked.clear();
num_ips_blocked = 0;
num_ips_blocked_loggable = 0;
}finally{
class_mon.exit();
}
}
public boolean
isEnabled()
{
return( COConfigurationManager.getBooleanParameter("Ip Filter Enabled",true));
}
public void
setEnabled(
boolean enabled )
{
COConfigurationManager.setParameter( "Ip Filter Enabled", enabled );
}
public void
markAsUpToDate()
{
last_update_time = SystemTime.getCurrentTime();
}
public long
getLastUpdateTime()
{
return( last_update_time );
}
public long
getTotalAddressesInRange()
{
return( range_manager.getTotalSpan());
}
public void
addListener(
IPFilterListener l )
{
try{
class_mon.enter();
List new_listeners = new ArrayList( listeners );
new_listeners.add( l );
listeners = new_listeners;
}finally{
class_mon.exit();
}
}
public void
removeListener(
IPFilterListener l )
{
try{
class_mon.enter();
List new_listeners = new ArrayList( listeners );
new_listeners.remove( l );
listeners = new_listeners;
}finally{
class_mon.exit();
}
}
public static void
main(
String[] args )
{
IpFilterImpl filter = new IpFilterImpl();
filter.ban( "255.1.1.1", "parp" );
filter.ban( "255.1.1.2", "parp" );
filter.ban( "255.1.2.2", "parp" );
System.out.println( "is banned:" + filter.isBanned( "255.1.1.4" ));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -