Jump to content
  • 0

[HELP]IPVP4 Filter


~Ge0rge~

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.


  • Posts

    • DISCORD :   utchiha_market   telegram    https://t.me/utchiha_market   SELLIX STORE :   https://utchiha-market.mysellix.io/   Join the server for more products :   https://discord.gg/hoodservices
    • When it comes to encrypting passwords, using a strong hashing algorithm like SHA-256 or bcrypt is recommended. These algorithms help ensure that passwords are securely stored and protected from being easily decrypted.
    • ***CLExt L2OFF Extender Premium Account Save - Auto Login***   We would like to sell account panel for save accounts for server owners or self player.  You can login and save your id and pass accounts or delete it etc.       Price: 100 euro.   ***CLExt L2OFF Extender Premium Auto-Farm Macro System*** We would like to sell Auto-Farm Macro System for server owners or self player.  You can add your potions and your macro to farm your character with your standars.       Price: 100 euro.   If you like to order send me DM or skype zoumhs999.
    • Diablo III, the action-packed hack-and-slash RPG developed by Blizzard Entertainment, has captivated gamers worldwide since its release in 2012. Now, imagine a world where Diablo III's source code is opened up to the community, inviting developers and enthusiasts alike to enhance and refine this beloved game. This topic delves into the possibilities, challenges, and community desires surrounding the idea of Diablo III as an open-source project.   Key Points: 1. Defining Diablo III: Diablo III is an action role-playing game set in the dark fantasy world of Sanctuary. Players traverse through randomized dungeons, battling hordes of demons and collecting loot to strengthen their characters. With its compelling storyline, addictive gameplay mechanics, and rich lore, Diablo III has amassed a dedicated fanbase over the years.   2. Open Source Potential: Opening up the source code of Diablo III could unlock a wealth of opportunities for the game's future. Community developers could introduce new features, enhance existing gameplay elements, and address long-standing issues. The modding community, known for its creativity and innovation, could breathe new life into the game by creating custom content, game modes, and user interface improvements. 3. Community Interest: The question arises - would the gaming community welcome the idea of Diablo III becoming open source? Many players are eager to see the game evolve beyond its current state, with enhancements such as improved balance, expanded end-game content, and enhanced multiplayer features. By involving the community in the development process, Diablo III could foster a stronger sense of ownership and collaboration among its players. 4. Challenges and Considerations: While the concept of Diablo III as an open source is enticing, it also presents several challenges. Ensuring the integrity of the game's balance and preventing cheating would be paramount concerns. Additionally, coordinating development efforts and maintaining a cohesive vision for the game could prove challenging in a community-driven environment. However, with proper oversight and collaboration, these obstacles can be overcome. 5. Is Diablo III an MMORPG? Diablo III is often categorized as an action RPG rather than a traditional MMORPG (massively multiplayer online role-playing game). While it does feature online multiplayer elements, including cooperative play and player-versus-player combat, it lacks the persistent open world typically associated with MMORPGs. Instead, Diablo III focuses on instanced dungeons and smaller-scale multiplayer interactions. The Benefits of Improvement: Improving Diablo III through open-source development could revitalize the game, attracting new players and re-engaging existing fans. By embracing community-driven innovation, Diablo III could remain relevant and enjoyable for years to come. Additionally, fostering an active modding community could extend the game's longevity and create new opportunities for player expression and creativity.   Source code  
  • Topics

×
×
  • Create New...