Jump to content
  • 0

Server atacker [Help]


Question

Posted

hello guys, some kids want to kill my server with Server atacker and they sending packets to my game server how i can protect? IP ban don't help they still flooding with proxy

4 answers to this question

Recommended Posts

  • 0
Posted

http://www.l2jserver.com/trac/changeset/3774/trunk/L2_GameServer/java/com/l2jserver/gameserver/GameServer.java

to make it working here make this:import com.l2jserver.util.IPv4Filter;

to this:import net.sf.l2j.util.IPv4Filter;

 

the same here:

http://www.l2jserver.com/trac/changeset/3774/trunk/L2_GameServer/java/com/l2jserver/loginserver/SelectorHelper.java

 

now the ipv4filter.java:(put it in l2j/util)

http://www.l2jserver.com/trac/browser/trunk/L2_GameServer/java/com/l2jserver/util/IPv4Filter.java?rev=3774

change this:package com.l2jserver.util; to this:package net.sf.l2j.util;

change this:import org.mmocore.network.IAcceptFilter; to this:import com.l2jserver.mmocore.network.IAcceptFilter;

 

And put the mmocore from the xaddytzu topic.to your workspace gs/lib or libs + ls/lib or libs.

For Interlude.

  • 0
Posted

Index: /trunk/L2J-Infinity_IL_GS/java/net/sf/l2j/loginserver/SelectorHelper.java
===================================================================
--- /trunk/L2J-Infinity_IL_GS/java/net/sf/l2j/loginserver/SelectorHelper.java (revision 9)
+++ /trunk/L2J-Infinity_IL_GS/java/net/sf/l2j/loginserver/SelectorHelper.java (revision 22)
@@ -23,4 +23,5 @@
import java.util.concurrent.TimeUnit;

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

@@ -38,8 +39,10 @@
{
	private ThreadPoolExecutor _generalPacketsThreadPool;
+	private IPv4Filter _ipv4filter;

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

@@ -67,5 +70,5 @@
	public boolean accept(SocketChannel sc)
	{
-		return !LoginController.getInstance().isBannedAddress(sc.socket().getInetAddress());
+		return _ipv4filter.accept(sc) && !LoginController.getInstance().isBannedAddress(sc.socket().getInetAddress());
	}

Index: /trunk/L2J-Infinity_IL_GS/java/net/sf/l2j/gameserver/network/L2GamePacketHandler.java
===================================================================
--- /trunk/L2J-Infinity_IL_GS/java/net/sf/l2j/gameserver/network/L2GamePacketHandler.java (revision 21)
+++ /trunk/L2J-Infinity_IL_GS/java/net/sf/l2j/gameserver/network/L2GamePacketHandler.java (revision 22)
@@ -33,5 +33,4 @@
import net.sf.l2j.loginserver.SelectorHelper;
import net.sf.l2j.loginserver.SelectorHelper.Flood;
-import net.sf.l2j.util.Util;

import com.l2jserver.mmocore.network.IAcceptFilter;
@@ -77,5 +76,5 @@
				else
				{
-					printDebug(opcode, buf, state, client);
+					System.out.println("The following IP adress is trying a flood action.Please Ban Him! ("+ client.toString() +")");
				}
				break;
@@ -105,5 +104,4 @@
						break;
					default:
-						printDebug(opcode, buf, state, client);
						break;
				}
@@ -805,5 +803,4 @@
		                    	break;
		                    default:
-		                     	printDebugDoubleOpcode(opcode, id2, buf, state, client);
		                    	break;
		                }
@@ -813,5 +810,4 @@
						break;*/
					default:
-						printDebug(opcode, buf, state, client);
						break;
				}
@@ -820,20 +816,6 @@
		return msg;
	}
-
-	private void printDebug(int opcode, ByteBuffer buf, GameClientState state, L2GameClient client)
-	{
-		if (!Config.PACKET_HANDLER_DEBUG)
-			return;
-			
-		int size = buf.remaining();
-		if (Config.LOG_PACKETS)
-			_log.warning("Unknown Packet: "+Integer.toHexString(opcode)+" on State: "+state.name()+" Client: "+client.toString());
-     	byte[] array = new byte[size];
-     	buf.get(array);
-     	_log.warning(Util.printData(array, size));
-     	if (Config.ENABLE_PACKET_PROTECTION)
-     		unknownPacketProtection(client);
-	}

+	@SuppressWarnings("unused")
	private void unknownPacketProtection(L2GameClient client)
	{
@@ -875,17 +857,4 @@
				break;
		}
-	}
-
-	private void printDebugDoubleOpcode(int opcode, int id2, ByteBuffer buf, GameClientState state, L2GameClient client)
-	{
-		if (!Config.PACKET_HANDLER_DEBUG)
-			return;
-				
-		int size = buf.remaining();
-		if (Config.LOG_PACKETS)
-			_log.warning("Unknown Packet: "+Integer.toHexString(opcode)+":" + Integer.toHexString(id2)+" on State: "+state.name()+" Client: "+client.toString());
-     	byte[] array = new byte[size];
-     	buf.get(array);
-     	_log.warning(Util.printData(array, size));
	}

Index: /trunk/L2J-Infinity_IL_GS/java/net/sf/l2j/gameserver/util/IPv4Filter.java
===================================================================
--- /trunk/L2J-Infinity_IL_GS/java/net/sf/l2j/gameserver/util/IPv4Filter.java (revision 22)
+++ /trunk/L2J-Infinity_IL_GS/java/net/sf/l2j/gameserver/util/IPv4Filter.java (revision 22)
@@ -0,0 +1,152 @@
+/* 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 2, 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+package net.sf.l2j.gameserver.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]
+* 
+* @Reworked by Adryan
+*
+*/
+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 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 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)
+			{
+				
+			}
+		}
+	}
+	
+}

 

that will help you too :)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...