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

    • 🎁 Double the Impact, Half the Cost! from 25/10/2025 until 25/12/2025 Renew your Donation Panel now and save 50% because supporting others should reward you too. 💡 Use code BLACKFRIDAY at checkout! https://hopzone.eu/store/product/26-donate-panel-v5/   About Donate Panel v5 PAYMENT IN EASY 5 STEPS Login with your character name. Select the donation service (Paypal Stripe Payeer MercadoPago 🆕). Select the amount of payment. Pay. 😎 Automatically recieve the reward ingame (and yes) while he is online! 🤯 PAYMENT METHODS Paypal Stripe accepts credit cards, debit cards, ACH transfers, Apple Pay, Google Pay, Microsoft Pay, and various local payment methods from around the world. Payeer accepts BTC, LTC, ETH, DASH, BCH, USD, EUR, RUB wallets MercadoPago accepts ARS, BRL, CLP, MXN, COP, PEN, UYU. PROTECTION Full SSL website (can be forced by htaccess) XSS Protection just in case. Remove vulnerability headers in htaccess level Session Validation COOKIE, POST, GET global inputs are sanitized SQL Injection protection Query String protetion Prepared statements of PDO driver (no sql injection there) Google Invisible Captcha v3 (NEW) Last but not least security through obscurity SEO & PUBLIC MANAGEMENT SEO Friendly urls (in htaccess level) Google Analytics and GTAG Code ready. Terms of use ready to go Refund policy ready to go Contact All the TERMS text are showing config dynamic item images/text with server's name and more OPTIMIZATION AND SPEED Zip Content (faster load) Memory save (unloading global vars) Using CDN’s for bootstrap Scripts are loaded in footer Images are soft to max 10kb Small and smart organized code style FUNCTIONALITIES Multilanguage (4 languages so far) EN ES NL EL (Easy to add more) Payment methods Paypal, Stripe, Payeer and MercadoPago After payment or cancel the user is redirected back to “Thank you” page. TECHNOLOGIES Bootstrap 5x CSS PHP 5.6+ (for l2off) and PHP 7.4+ (for java) Extensions for php: MySQL (L2Java), pdo_dblib(L2OFF), pdo_sqlsrv(L2OFF), mssql_connect (L2OFF) and PDO Drivers that support MariaDB, MySQL, MsSQL. SYSTEMS Stripe and MercadoPago supports sandbox and live. Detailed and seperated Logs (ERROR, DEVELOPER, INFO, WARNING, PAYMENT) for website and Rest APIs. Detailed Log in database for Payments and services used. Google Analytics (You know when players are in the panel and if they pay) Google Captcha V3 Dynamic Icons to show according your Donate Item ID Multiple servers L2OFF or L2JAVA servers can be added together as server network     BE AWARE: Leaked versions of old v2 panels (year 2018 with bugs) are still out sold by scammers without support or knowledge of the files.
    • I work with Kenrix and he is a  next level coder. Hugely Recommended.
    • Follow our Telegram channel, because exciting events are coming very soon! Halloween, 11.11, and also a giveaway related to 3000 subscribers in our Telegram channel are ahead! What do you think we have prepared? Subscribe to our Telegram channel and stay updated on all the news: https://t.me/accsforyou_shop Active links to SOCNET stores: Digital goods store (Website): Go Telegram store bot: Go – convenient access to the store via Telegram messenger. Telegram Stars purchasing bot: Go – fast and profitable purchase of stars in Telegram. SMM Panel: Go – promotion of your social media accounts. We would like to introduce you to the current list of promotions and special offers for purchasing products and services of our platform: 1. Promo code OCTOBER2025 (8% discount) for purchases in our store (Website, Bot) in October! You can also use a promo code for the first purchase: SOCNET (15% discount) 2. Get $1 to your store balance or a 10–20% discount — just send your username after registering on our website using the following template: "SEND ME BONUS, MY USERNAME IS..." — you need to write it in our forum thread! 3. Get $1 for the first trial launch of the SMM Panel — just open a ticket with the topic “Get Trial Bonus” on our website (Support). 4. Weekly Telegram Stars giveaways in our Telegram channel and in our Stars purchasing bot! News: ➡ Telegram channel: https://t.me/accsforyou_shop ➡ WhatsApp channel: https://chat.whatsapp.com/K8rBy500nA73z27PxgaJUw?mode=ems_copy_t ➡ Discord server: https://discord.gg/y9AStFFsrh Contacts & Support: ➡ Telegram: https://t.me/socnet_support ➡ WhatsApp: https://wa.me/79051904467 ➡ Discord: socnet_support ➡ ✉ Email: solomonbog@socnet.store
    • Follow our Telegram channel, because exciting events are coming very soon! Halloween, 11.11, and also a giveaway related to 3000 subscribers in our Telegram channel are ahead! What do you think we have prepared? Subscribe to our Telegram channel and stay updated on all the news: https://t.me/accsforyou_shop Active links to SOCNET stores: Digital goods store (Website): Go Telegram store bot: Go – convenient access to the store via Telegram messenger. Telegram Stars purchasing bot: Go – fast and profitable purchase of stars in Telegram. SMM Panel: Go – promotion of your social media accounts. We would like to introduce you to the current list of promotions and special offers for purchasing products and services of our platform: 1. Promo code OCTOBER2025 (8% discount) for purchases in our store (Website, Bot) in October! You can also use a promo code for the first purchase: SOCNET (15% discount) 2. Get $1 to your store balance or a 10–20% discount — just send your username after registering on our website using the following template: "SEND ME BONUS, MY USERNAME IS..." — you need to write it in our forum thread! 3. Get $1 for the first trial launch of the SMM Panel — just open a ticket with the topic “Get Trial Bonus” on our website (Support). 4. Weekly Telegram Stars giveaways in our Telegram channel and in our Stars purchasing bot! News: ➡ Telegram channel: https://t.me/accsforyou_shop ➡ WhatsApp channel: https://chat.whatsapp.com/K8rBy500nA73z27PxgaJUw?mode=ems_copy_t ➡ Discord server: https://discord.gg/y9AStFFsrh Contacts & Support: ➡ Telegram: https://t.me/socnet_support ➡ WhatsApp: https://wa.me/79051904467 ➡ Discord: socnet_support ➡ ✉ Email: solomonbog@socnet.store
    • Follow our Telegram channel, because exciting events are coming very soon! Halloween, 11.11, and also a giveaway related to 3000 subscribers in our Telegram channel are ahead! What do you think we have prepared? Subscribe to our Telegram channel and stay updated on all the news: https://t.me/accsforyou_shop Active links to SOCNET stores: Digital goods store (Website): Go Telegram store bot: Go – convenient access to the store via Telegram messenger. Telegram Stars purchasing bot: Go – fast and profitable purchase of stars in Telegram. SMM Panel: Go – promotion of your social media accounts. We would like to introduce you to the current list of promotions and special offers for purchasing products and services of our platform: 1. Promo code OCTOBER2025 (8% discount) for purchases in our store (Website, Bot) in October! You can also use a promo code for the first purchase: SOCNET (15% discount) 2. Get $1 to your store balance or a 10–20% discount — just send your username after registering on our website using the following template: "SEND ME BONUS, MY USERNAME IS..." — you need to write it in our forum thread! 3. Get $1 for the first trial launch of the SMM Panel — just open a ticket with the topic “Get Trial Bonus” on our website (Support). 4. Weekly Telegram Stars giveaways in our Telegram channel and in our Stars purchasing bot! News: ➡ Telegram channel: https://t.me/accsforyou_shop ➡ WhatsApp channel: https://chat.whatsapp.com/K8rBy500nA73z27PxgaJUw?mode=ems_copy_t ➡ Discord server: https://discord.gg/y9AStFFsrh Contacts & Support: ➡ Telegram: https://t.me/socnet_support ➡ WhatsApp: https://wa.me/79051904467 ➡ Discord: socnet_support ➡ ✉ Email: solomonbog@socnet.store
  • 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