Jump to content

Recommended Posts

Posted

this as a temporary solution for L2j-Killer

fix this, [c]DS

Index: java/com/l2jserver/gameserver/GameServer.java
===================================================================
--- java/com/l2jserver/gameserver/GameServer.java	(revision 3728)
+++ java/com/l2jserver/gameserver/GameServer.java	(working copy)
@@ -437,7 +437,7 @@
		sc.HELPER_BUFFER_COUNT = Config.MMO_HELPER_BUFFER_COUNT;

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

		InetAddress bindAddress = null;
		if (!Config.GAMESERVER_HOSTNAME.equals("*"))
Index: java/com/l2jserver/gameserver/network/L2GamePacketHandler.java
===================================================================
--- java/com/l2jserver/gameserver/network/L2GamePacketHandler.java	(revision 3728)
+++ java/com/l2jserver/gameserver/network/L2GamePacketHandler.java	(working copy)
@@ -14,11 +14,15 @@
  */
package com.l2jserver.gameserver.network;

+import java.net.InetAddress;
import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+import java.util.HashMap;
import java.util.concurrent.RejectedExecutionException;
import java.util.logging.Logger;


+import org.mmocore.network.IAcceptFilter;
import org.mmocore.network.IClientFactory;
import org.mmocore.network.IMMOExecutor;
import org.mmocore.network.IPacketHandler;
@@ -29,6 +33,8 @@
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.network.L2GameClient.GameClientState;
import com.l2jserver.gameserver.network.clientpackets.*;
+import com.l2jserver.loginserver.SelectorHelper;
+import com.l2jserver.loginserver.SelectorHelper.Flood;
import com.l2jserver.util.Util;

/**
@@ -40,9 +46,10 @@
  * Note: If for a given exception a packet needs to be handled on more then one state, then it should be added to all these states.
  * @author  KenM
  */
-public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>, IClientFactory<L2GameClient>, IMMOExecutor<L2GameClient>
+public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>, IClientFactory<L2GameClient>, IMMOExecutor<L2GameClient>, IAcceptFilter
{
     private static final Logger _log = Logger.getLogger(L2GamePacketHandler.class.getName());
+    private final HashMap<Integer, Flood> _ipFloodMap = new HashMap<Integer, Flood>();

	// implementation
	public ReceivablePacket<L2GameClient> handlePacket(ByteBuffer buf, L2GameClient client)
@@ -1130,4 +1137,52 @@
			}
		}
	}
+
+	@Override
+	public boolean accept(SocketChannel sc)
+	{
+		InetAddress addr = sc.socket().getInetAddress();
+		int h = SelectorHelper.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;
+	}
}
Index: java/com/l2jserver/loginserver/SelectorHelper.java
===================================================================
--- java/com/l2jserver/loginserver/SelectorHelper.java	(revision 3728)
+++ java/com/l2jserver/loginserver/SelectorHelper.java	(working copy)
@@ -123,18 +123,18 @@
	 * @param ip
	 * @return
	 */
-	private int hash(byte[] ip)
+	public static int hash(byte[] ip)
	{
		return ip[0] & 0xFF | ip[1] << 8 & 0xFF00 | ip[2] << 16 & 0xFF0000 | ip[3] << 24
		        & 0xFF000000;
	}

-	private class Flood
+	public static class Flood
	{
-		long lastAccess;
-		int trys;
+		public long lastAccess;
+		public int trys;

-		Flood()
+		public Flood()
		{
			lastAccess = System.currentTimeMillis();
			trys = 0;

Posted

And GoodT knew that??

 

He has probably used it?

Instead of trolling everybody, just thank the author.

 

Anyway, I think that these shares should stay out of mxc ^^

More dead servers = less Lineage ][ Destruction.

 

Thanks for the share tho.

Posted

patch works fine, but i added here also the removal of expired "bans", because without it, the IP could not login till gameserver restart (bad for LAN house..)

Index: java/com/l2jserver/gameserver/GameServer.java
===================================================================
--- java/com/l2jserver/gameserver/GameServer.java	(revision 3703)
+++ java/com/l2jserver/gameserver/GameServer.java	(working copy)
@@ -437,7 +437,7 @@
		sc.HELPER_BUFFER_COUNT = Config.MMO_HELPER_BUFFER_COUNT;

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

		InetAddress bindAddress = null;
		if (!Config.GAMESERVER_HOSTNAME.equals("*"))
Index: java/com/l2jserver/gameserver/network/L2GamePacketHandler.java
===================================================================
--- java/com/l2jserver/gameserver/network/L2GamePacketHandler.java	(revision 3703)
+++ java/com/l2jserver/gameserver/network/L2GamePacketHandler.java	(working copy)
@@ -14,11 +14,17 @@
  */
package com.l2jserver.gameserver.network;

+import java.net.InetAddress;
import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map.Entry;
import java.util.concurrent.RejectedExecutionException;
import java.util.logging.Logger;


+import org.mmocore.network.IAcceptFilter;
import org.mmocore.network.IClientFactory;
import org.mmocore.network.IMMOExecutor;
import org.mmocore.network.IPacketHandler;
@@ -29,6 +35,8 @@
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.network.L2GameClient.GameClientState;
import com.l2jserver.gameserver.network.clientpackets.*;
+import com.l2jserver.loginserver.SelectorHelper;
+import com.l2jserver.loginserver.SelectorHelper.Flood;
import com.l2jserver.util.Util;

/**
@@ -40,9 +48,51 @@
  * Note: If for a given exception a packet needs to be handled on more then one state, then it should be added to all these states.
  * @author  KenM
  */
-public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>, IClientFactory<L2GameClient>, IMMOExecutor<L2GameClient>
+public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>, IClientFactory<L2GameClient>, IMMOExecutor<L2GameClient>, IAcceptFilter
{
     private static final Logger _log = Logger.getLogger(L2GamePacketHandler.class.getName());
+    private final HashMap<Integer, Flood> _ipFloodMap = new HashMap<Integer, Flood>();
+    
+	public L2GamePacketHandler()
+	{
+		super();
+		Thread cleanUpIpFloodMap = new Thread()
+		{
+			public void run()
+			{
+				while (true)
+				{
+					long reference = System.currentTimeMillis() - (1000 * 300);
+					ArrayList<Integer> toRemove = new ArrayList<Integer>();
+					synchronized (_ipFloodMap)
+					{
+						for (Entry<Integer, Flood> e : _ipFloodMap.entrySet())
+						{
+							Flood f = e.getValue();
+							if (f.lastAccess < reference)
+								toRemove.add(e.getKey());
+						}
+					}
+					
+					synchronized (_ipFloodMap)
+					{
+						_ipFloodMap.keySet().removeAll(toRemove);
+					}
+					
+					try
+					{
+						Thread.sleep(5000);
+					}
+					catch (InterruptedException e)
+					{
+						
+					}
+				}
+			}
+		};
+		cleanUpIpFloodMap.setDaemon(true);
+		cleanUpIpFloodMap.start();
+	}

	// implementation
	public ReceivablePacket<L2GameClient> handlePacket(ByteBuffer buf, L2GameClient client)
@@ -1130,4 +1180,52 @@
			}
		}
	}
+
+	@Override
+	public boolean accept(SocketChannel sc)
+	{
+		InetAddress addr = sc.socket().getInetAddress();
+		int h = SelectorHelper.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;
+	}
}
Index: java/com/l2jserver/loginserver/SelectorHelper.java
===================================================================
--- java/com/l2jserver/loginserver/SelectorHelper.java	(revision 3703)
+++ java/com/l2jserver/loginserver/SelectorHelper.java	(working copy)
@@ -34,8 +34,7 @@
  * 
  * @author KenM
  */
-public class SelectorHelper extends Thread implements IMMOExecutor<L2LoginClient>,
-        IClientFactory<L2LoginClient>, IAcceptFilter
+public class SelectorHelper extends Thread implements IMMOExecutor<L2LoginClient>, IClientFactory<L2LoginClient>, IAcceptFilter
{
	private HashMap<Integer, Flood> _ipFloodMap;
	private ThreadPoolExecutor _generalPacketsThreadPool;
@@ -123,18 +122,17 @@
	 * @param ip
	 * @return
	 */
-	private int hash(byte[] ip)
+	public static int hash(byte[] ip)
	{
-		return ip[0] & 0xFF | ip[1] << 8 & 0xFF00 | ip[2] << 16 & 0xFF0000 | ip[3] << 24
-		        & 0xFF000000;
+		return ip[0] & 0xFF | ip[1] << 8 & 0xFF00 | ip[2] << 16 & 0xFF0000 | ip[3] << 24 & 0xFF000000;
	}

-	private class Flood
+	public static class Flood
	{
-		long lastAccess;
-		int trys;
+		public long lastAccess;
+		public int trys;

-		Flood()
+		public Flood()
		{
			lastAccess = System.currentTimeMillis();
			trys = 0;
@@ -151,7 +149,7 @@
		while (true)
		{
			long reference = System.currentTimeMillis() - (1000 * 300);
-			ArrayList<Integer> toRemove = new ArrayList<Integer>(50);
+			ArrayList<Integer> toRemove = new ArrayList<Integer>();
			synchronized (_ipFloodMap)
			{
				for (Entry<Integer, Flood> e : _ipFloodMap.entrySet())
@@ -164,10 +162,7 @@

			synchronized (_ipFloodMap)
			{
-				for (Integer i : toRemove)
-				{
-					_ipFloodMap.remove(i);
-				}
+				_ipFloodMap.keySet().removeAll(toRemove);
			}

			try

[c]DrHouse and janiii

Posted

I can't really see the commit at l2jserver timeline. I might be blind =/

who said they commited it anyway? its a temp fix that drhouse posted on l2j forums.. maybe it doesnt even work (well it should since its drhouse's but nobody seems have tested it.. least nobody posted some feedback)

Posted

I dont know, why a lot of users spam this forum, with "GoodT thx to L2JServer". Omg, its my thing and DāЯқŜiĐє you stop spam. You have 1k post? I think, how you have it.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • 12-07-2025 - OUR TOPIC IS RELEVANT! CONTACT US BY THE CONTACTS BELOW
    • Hundreds of players have already jumped into the world of L2Elixir x3, and the server grows bigger every day! A truly international community is forming — EU, NA, LATAM, Asia — all gathering for the same purpose: To relive the L2Elixir era the right way. Join now and be part of the early wave!   Website: https://l2elixir.org/ Discord: https://discord.gg/5ydPHvhbxs   🎄 Christmas Event Activated! 🎄 Craft your Ordinary or Special Christmas Tree, place it outside of a peace zone, and enjoy festive outfits, boosted EXP/SP, Adena, and Drop Rates, plus the Holiday Festival buff  (more HP/MP/CP, higher P.Def/P.Atk/M.Atk, faster movement, reduced MP cost!) every 12-hours! 🎁 Santa’s Hourly Gifts While you’re actively farming, Santa appears worldwide to drop special rewards such as: Special Christmas Tree Christmas Red Sock Santa’s Weapon Exchange Ticket (12h) Gift from Santa Santa Hats & Rudolph accessories Agathion: Rudolph Chest of Experience Shadow Hats Scrolls Event b.soe / b.rez Loot Crates 🔥 Santa’s Weapon Ticket Gives you a D/C/B-grade weapon based on your level, randomly enchanted +4 to +10!  4-hour expiration time. Celebrate, fight, farm — and let Santa upgrade your holidays! 🎅✨
    • what do u mean i want to change the normal weapons some weapons are working perftect some not getting th effect and the arcana has the effect above the weapons as u see ... i dont what is the probkenm
    • Stop paying for files that are already public and free. Here you can download a fully working Interlude server with C4-like gameplay, including source code so you can compile it yourself and verify everything. People will try to convince you that free releases are “broken”, “full of backdoors”, etc. That’s exactly why I’m also providing the SVN with the full source – so you can: Review the code yourself Remove / modify whatever you don’t like Compile your own binaries What’s included GX-EXT Interlude server (C4-style gameplay) – L2Off Client Interlude tweaked for C4 gameplay Public SVN with source code Downloads: Server GX-EXT: https://www.mediafire.com/file/q5ipkjd36tnhfxv/L2OFF_C4_C4_ACU_GXEXT.rar/file Client Interlude C4 Gameplay: https://www.mediafire.com/file/rdkfc8wwau042oh/Cliente_Interlude_Jugabilidad_C4.rar/file SVN (source code, delayed a couple of months to avoid reselling fresh work): https://svn.l2servers.com.ar/!/#GX-EXT_INTERLUDE User: gx Pass: gx How to compile To compile the source you will need: Visual Studio 2005 (x64 toolset) (Classic L2Off toolchain – yes, it’s old, but that’s what the original server uses.) Use this as you want: learn, test, open your own server, or just audit the code. But please, stop buying the same leaked/resold files over and over when you can get them here for free, with source, and actually know what you’re running.  
    • @GX-Ext Please reupload the pack+web+client because all the links inside that post or in the https://l2servers.com.ar/ are dead
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock