Jump to content
  • 0

[HELP]IPVP4 Filter


~Ge0rge~
 Share

Question

i put IPv4 filter in java side...i compile all ok..but when someone attacks...in gameserver still the i see the packets logs that attack.it didnt fixed? or it send empty packets? can someone explain it?

Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0

ofc.here is the error on gameserver.

http://img573.imageshack.us/i/snapshotr.png/

Someone attacking your server with packets...

as i can see on your title you are L2J Developer so fix it ;)

Link to comment
Share on other sites

  • 0

Someone attacking your server with packets...

as i can see on your title you are L2J Developer so fix it ;)

no one attacks :). i just attack myself to test it...

i have puted ipvp4filter what else should i do -_-

Link to comment
Share on other sites

  • 0

pfff men i dont have a server to use a linux ...i am just wondering!

and did you change this ? :D

 

net/sf/l2j/gameserver/GameServer.java

-      _selectorThread = new SelectorThread<L2GameClient>(sc, gph, gph, gph, null);
+      _selectorThread = new SelectorThread<L2GameClient>(sc, gph, gph, gph, new IPv4Filter());

 

net/sf/l2j/loginserver/SelectorHelper.java

package net.sf.l2j.loginserver;

-import java.net.InetAddress;
import java.nio.channels.SocketChannel;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map.Entry;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import net.sf.l2j.loginserver.serverpackets.Init;
+import net.sf.l2j.util.IPv4Filter;

import org.mmocore.network.IAcceptFilter;
import org.mmocore.network.IClientFactory;
@@ -33,18 +30,15 @@
  * 
  * @author KenM
  */
-public class SelectorHelper extends Thread implements IMMOExecutor<L2LoginClient>,
+public class SelectorHelper implements IMMOExecutor<L2LoginClient>,
         IClientFactory<L2LoginClient>, IAcceptFilter
{
-   private HashMap<Integer, Flood> _ipFloodMap;
    private ThreadPoolExecutor _generalPacketsThreadPool;
+   private IPv4Filter _ipv4filter;

    public SelectorHelper()
    {
-      _generalPacketsThreadPool = new ThreadPoolExecutor(4, 6, 15L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
-      _ipFloodMap = new HashMap<Integer, Flood>();
-      super.setDaemon(true);
-      super.start();
+      _ipv4filter = new IPv4Filter();
    }

    /**
@@ -73,110 +67,6 @@
     */
    public boolean accept(SocketChannel sc)
    {
-      InetAddress addr = sc.socket().getInetAddress();
-      int h = hash(addr.getAddress());
-      
-      long current = System.currentTimeMillis();
-      Flood f;
-      synchronized (_ipFloodMap)
-      {
-         f = _ipFloodMap.get(h);
-      }
-      if (f != null)
-      {
-         if (f.trys == -1)
-         {
-            f.lastAccess = current;
-            return false;
-         }
-         
-         if (f.lastAccess + 1000 > current)
-         {
-            f.lastAccess = current;
-            
-            if (f.trys >= 3)
-            {
-               f.trys = -1;
-               return false;
-            }
-            
-            f.trys++;
-         }
-         else
-         {
-            f.lastAccess = current;
-         }
-      }
-      else
-      {
-         synchronized (_ipFloodMap)
-         {
-            _ipFloodMap.put(h, new Flood());
-         }
-      }
-      return !LoginController.getInstance().isBannedAddress(addr);
+      return _ipv4filter.accept(sc) && !LoginController.getInstance().isBannedAddress(sc.socket().getInetAddress());
    }
-   
-   /**
-    * 
-    * @param ip
-    * @return
-    */
-   private int hash(byte[] ip)
-   {
-      return ip[0] & 0xFF | ip[1] << 8 & 0xFF00 | ip[2] << 16 & 0xFF0000 | ip[3] << 24
-              & 0xFF000000;
-   }
-   
-   private class Flood
-   {
-      long lastAccess;
-      int trys;
-      
-      Flood()
-      {
-         lastAccess = System.currentTimeMillis();
-         trys = 0;
-      }
-   }
-   
-   /**
-    * 
-    * @see java.lang.Thread#run()
-    */
-   @Override
-   public void run()
-   {
-      while (true)
-      {
-         long reference = System.currentTimeMillis() - (1000 * 300);
-         ArrayList<Integer> toRemove = new ArrayList<Integer>(50);
-         synchronized (_ipFloodMap)
-         {
-            for (Entry<Integer, Flood> e : _ipFloodMap.entrySet())
-            {
-               Flood f = e.getValue();
-               if (f.lastAccess < reference)
-                  toRemove.add(e.getKey());
-            }
-         }
-         
-         synchronized (_ipFloodMap)
-         {
-            for (Integer i : toRemove)
-            {
-               _ipFloodMap.remove(i);
-            }
-         }
-         
-         try
-         {
-            Thread.sleep(5000);
-         }
-         catch (InterruptedException e)
-         {
-            
-         }
-      }
-   }
}

Link to comment
Share on other sites

  • 0

Index: java/net/sf/l2j/gameserver/GameServer.java
===================================================================
--- java/net/sf/l2j/gameserver/GameServer.java	(revision 3898)
+++ java/net/sf/l2j/gameserver/GameServer.java	(working copy)
@@ -59,7 +59,6 @@
import net.sf.l2j.gameserver.datatables.SummonItemsData;
import net.sf.l2j.gameserver.datatables.TeleportLocationTable;
import net.sf.l2j.gameserver.datatables.ZoneData;
-
import net.sf.l2j.gameserver.geoeditorcon.GeoEditorListener;
import net.sf.l2j.gameserver.handler.AdminCommandHandler;
import net.sf.l2j.gameserver.handler.ItemHandler;
@@ -134,6 +133,7 @@
import net.sf.l2j.gameserver.handler.itemhandlers.Firework;
import net.sf.l2j.gameserver.handler.itemhandlers.FishShots;
import net.sf.l2j.gameserver.handler.itemhandlers.Harvester;
+import net.sf.l2j.gameserver.handler.itemhandlers.Maps;
import net.sf.l2j.gameserver.handler.itemhandlers.MercTicket;
import net.sf.l2j.gameserver.handler.itemhandlers.MysteryPotion;
import net.sf.l2j.gameserver.handler.itemhandlers.PaganKeys;
@@ -151,7 +151,6 @@
import net.sf.l2j.gameserver.handler.itemhandlers.SpecialXMas;
import net.sf.l2j.gameserver.handler.itemhandlers.SpiritShot;
import net.sf.l2j.gameserver.handler.itemhandlers.SummonItems;
-import net.sf.l2j.gameserver.handler.itemhandlers.Maps;
import net.sf.l2j.gameserver.handler.skillhandlers.BalanceLife;
import net.sf.l2j.gameserver.handler.skillhandlers.BeastFeed;
import net.sf.l2j.gameserver.handler.skillhandlers.Blow;
@@ -229,6 +228,7 @@
import net.sf.l2j.gameserver.util.DynamicExtension;
import net.sf.l2j.gameserver.util.FloodProtector;
import net.sf.l2j.status.Status;
+import net.sf.l2j.util.IPv4Filter;

import com.l2jserver.mmocore.network.SelectorServerConfig;
import com.l2jserver.mmocore.network.SelectorThread;
@@ -660,6 +660,7 @@
		SelectorServerConfig ssc = new SelectorServerConfig(Config.PORT_GAME);
		L2GamePacketHandler gph = new L2GamePacketHandler();
		_selectorThread = new SelectorThread<L2GameClient>(ssc, gph, gph, gph);
+		_selectorThread.setAcceptFilter(new IPv4Filter());
		_selectorThread.openServerSocket();
		_selectorThread.start();
		_log.config("Maximum Numbers of Connected Players: " + Config.MAXIMUM_ONLINE_USERS);
Index: java/net/sf/l2j/loginserver/SelectorHelper.java
===================================================================
--- java/net/sf/l2j/loginserver/SelectorHelper.java	(revision 3898)
+++ java/net/sf/l2j/loginserver/SelectorHelper.java	(working copy)
@@ -23,6 +23,7 @@
import java.util.concurrent.TimeUnit;

import net.sf.l2j.loginserver.serverpackets.Init;
+import net.sf.l2j.util.IPv4Filter;

import com.l2jserver.mmocore.network.IAcceptFilter;
import com.l2jserver.mmocore.network.IClientFactory;
@@ -37,10 +38,12 @@
public class SelectorHelper implements IMMOExecutor<L2LoginClient>, IClientFactory<L2LoginClient>, IAcceptFilter
{
	private ThreadPoolExecutor _generalPacketsThreadPool;
+	private IPv4Filter _ipv4filter;

	public SelectorHelper()
	{
		_generalPacketsThreadPool = new ThreadPoolExecutor(4, 6, 15L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
+		_ipv4filter = new IPv4Filter();
	}

	/**
@@ -66,7 +69,7 @@
	 */
	public boolean accept(SocketChannel sc)
	{
-		return !LoginController.getInstance().isBannedAddress(sc.socket().getInetAddress());
+		return _ipv4filter.accept(sc) && !LoginController.getInstance().isBannedAddress(sc.socket().getInetAddress());
	}

}
Index: java/net/sf/l2j/util/IPv4Filter.java
===================================================================
--- java/net/sf/l2j/util/IPv4Filter.java	(revision 0)
+++ java/net/sf/l2j/util/IPv4Filter.java	(revision 0)
@@ -0,0 +1,149 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.sf.l2j.util;
+
+import java.net.InetAddress;
+import java.nio.channels.SocketChannel;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map.Entry;
+
+import com.l2jserver.mmocore.network.IAcceptFilter;
+
+/**
+ * Formatted Forsaiken's IPv4 filter [DrHouse]
+ * 
+ * @author Forsaiken
+ *
+ */
+public class IPv4Filter implements IAcceptFilter, Runnable
+{
+	private HashMap<Integer, Flood> _ipFloodMap;
+
+	private static final long SLEEP_TIME = 5000;
+
+	public IPv4Filter()
+	{
+		_ipFloodMap = new HashMap<Integer, Flood>();
+		Thread t = new Thread(this);
+		t.setDaemon(true);
+		t.start();
+	}
+
+	/**
+	 * 
+	 * @param ip
+	 * @return
+	 */
+	private static final int hash(byte[] ip)
+	{
+		return ip[0] & 0xFF | ip[1] << 8 & 0xFF00 | ip[2] << 16 & 0xFF0000
+				| ip[3] << 24 & 0xFF000000;
+	}
+
+	protected static final class Flood
+	{
+		long lastAccess;
+
+		int trys;
+
+		Flood()
+		{
+			lastAccess = System.currentTimeMillis();
+			trys = 0;
+		}
+	}
+
+	public boolean accept(SocketChannel arg0)
+	{
+		InetAddress addr = arg0.socket().getInetAddress();
+		int h = hash(addr.getAddress());
+
+		long current = System.currentTimeMillis();
+		Flood f;
+		synchronized (_ipFloodMap)
+		{
+			f = _ipFloodMap.get(h);
+		}
+		if (f != null)
+		{
+			if (f.trys == -1)
+			{
+				f.lastAccess = current;
+				return false;
+			}
+
+			if (f.lastAccess + 1000 > current)
+			{
+				f.lastAccess = current;
+
+				if (f.trys >= 3)
+				{
+					f.trys = -1;
+					return false;
+				}
+
+				f.trys++;
+			} else
+			{
+				f.lastAccess = current;
+			}
+		} else
+		{
+			synchronized (_ipFloodMap)
+			{
+				_ipFloodMap.put(h, new Flood());
+			}
+		}
+
+		return true;
+	}
+
+	public void run()
+	{
+		while (true)
+		{
+			long reference = System.currentTimeMillis() - (1000 * 300);
+			ArrayList<Integer> toRemove = new ArrayList<Integer>(50);
+
+			synchronized (_ipFloodMap)
+			{
+				for (Entry<Integer, Flood> e : _ipFloodMap.entrySet())
+				{
+					Flood f = e.getValue();
+					if (f.lastAccess < reference)
+						toRemove.add(e.getKey());
+				}
+			}
+
+			synchronized (_ipFloodMap)
+			{
+				for (Integer i : toRemove)
+				{
+					_ipFloodMap.remove(i);
+				}
+			}
+
+			try
+			{
+				Thread.sleep(SLEEP_TIME);
+			} catch (InterruptedException e)
+			{
+
+			}
+		}
+	}
+}
\ No newline at end of file

 

That is the patch.help!

Link to comment
Share on other sites

  • 0

I think that the first is better ;)

-      _selectorThread = new SelectorThread<L2GameClient>(sc, gph, gph, gph, null);
+      _selectorThread = new SelectorThread<L2GameClient>(sc, gph, gph, gph, new IPv4Filter());

 

		_selectorThread = new SelectorThread<L2GameClient>(ssc, gph, gph, gph);
+		_selectorThread.setAcceptFilter(new IPv4Filter());

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share



  • Posts

    • Send me the corect pass pls!!  thanks in advance!!
    • Welcome back to L2Etina! We are coming back with a new  x3 Interlude Chronicle  For those who didn't play before, L2Etina is Interlude Chronicle with Classic Client. It means game interface is new and that we have a lot of cool features like radar, mail, Item Search Window, Seed Auction, Buff Stores. Gameplay stays the same as on Interlude though, so there aren't any changes to skills, bosses, drops etc. We are aiming to provide a long-term server without any kind of wipe.   Rates: Experience: 3x Skill Points: 3x Adena Drop: 2x Item Drop: 2x Seal Stones Drop: 2x Spoil Rate: 2x Raid/Epic Boss Experience: 1x Raid/Epic Boss Skill Points: 1x Raid/Epic Boss Drop: 1x No Dual Box No Bots No Donate No Auto Pick Up Siege of each castle takes place every 2 weeks First Castle Siege starts date TBD Heroes are selected every 2 weeks First Olympiad Period starts date TBD     Classic Game Client: Modern look of the game Improved performance No Critical Errors Tons of new Game Settings and Interface Windows Damage on the Screen Healths Bars Mail Radar Cloaks Party Tokens Skill Learning Panel New Skills Enchanting Items on Chat Npc Debuff Info Improved Clan Notice Editing Quick Status Actions Exp Bar and redesigned Main Menu Friend Manager Quest Areas on the Map Redesigned Character Creation Clan Ranking Redesigned Past Olympiad Ranking Colorful System Messages No Adena Limit   Custom Features: Guide Window provides all important information about Lineage II and L2Etina Soul Crystal Window shows which monsters you need to hunt and which Soul Crystal you need for your weapon Bot Reporting Function and Smart Guard provides playing without Bots Item Search Window allows you to find every possible source of getting item that you are interested in Buff Store allows automatic buff sales Offline Private Store Sales Seed Auction allows everyone to take part in manor Shady Man allows to purchase info about respawn of Subclass Raid Bosses & exchanges Pipette Knife for Red Pipette Knife Shadow weapons are disabled Fishing system is disabled Automatic Twitch Rewards Ranking Window Automatic Crystallization Sales Exit Game Statistics     Enchant Rates: Safe Enchant: +3 Safe Enchant Full-Armor: +4 Max Enchant: +16 Enchanting Chance: 66%   Skills: Skills learned by Skills Panel Spell Books are required for Skill Learning Retail amount of Buff Slots Retail Buff Duration Skills can be enchanted by Skills Panel   Bosses Respawn Duration: Cabrio, Kernon, Golkonda, Hallate: 20 - 24 hours Flame of Splendor Barakiel: 16 - 20 hours Queen Ant: 34 - 36 hours Orfen: 46 - 48 hours Core: 58 - 60 hours Zaken: 58 - 60 hours Baium: 164 - 168 hours Frintezza: 44 - 48 hours Antharas: 260 - 264 hours Valakas: 260 - 264 hours     Quest Item Drop Rate: Dangerous Seduction: Requires first class transfer Kamael: A Window to the Future: Requires first class transfer Gather the Flames: 1x Relics of the Old Empire: 1x Alliance with Varka Silenos: 1x Alliance with Ketra Orcs: 1x War with Ketra: 1x War with Varka: 1x Third Class Quests: 1x Seekers of the Holy Grail: 1x Guardians of the Holy Grail: 1x The Finest Food: 1x Four Goblets: 1x Legacy of Insolence: 1x Exploration of the Giants' Cave, Part I & II: 1x Coins of Magic: 3x Other Quests: 2x     Beta Testing: 22th of August Grand Opening: 16th of September Visit us at https://l2etina.com Discord : https://discord.gg/l2etina
    • his Profile on maxcheaters? @VisaGriaunantis
    • Hey, I don't know if this post really fits there but I've searched everywhere on the internet and this is the most active and helpful place i could find. I was wondering if its possible I could get the login screen of h5 part 4 without the GUI, like without the login screen in the middle, the text on top right and the settings on bottom right. I have no clue when it comes to coding, so I would like some guidance. Is it easy to do? Do I just search it in some folder or do I have to edit some stuff in order to make the GUI go away and then open the game and take a capture of the login screen? I just want to record the login screen without these things so I can make it into an animated wallpaper for me and my friend, h5 part 4 was our favorite. Thanks in advance !
    • AMD Ryzen 9 3900x      12cores, 24 threads @4,60Ghz turbo      64GB DDR3 ECC      2x 512GB NVME SSD      1Gbit Shared Port 50TB Bandwdith   169€/month   Order: https://hostslick.com/dedicated-servers     Are you fan of AMD Ryzen? We still have some!   Order within next 48h from now and get a FREE Graphic Card  Gigabit geforce gtx 1050 ti  4GB included! (normally +40€/m!)
  • Topics

×
×
  • Create New...