Index: java/com/l2jserver/gameserver/GameServer.java
===================================================================
--- java/com/l2jserver/gameserver/GameServer.java (revision 3751)
+++ java/com/l2jserver/gameserver/GameServer.java (working copy)
@@ -125,6 +125,7 @@
import com.l2jserver.gameserver.util.DynamicExtension;
import com.l2jserver.status.Status;
import com.l2jserver.util.DeadLockDetector;
+import com.l2jserver.util.IPv4Filter;
/**
* This class ...
@@ -437,7 +438,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, new IPv4Filter());
InetAddress bindAddress = null;
if (!Config.GAMESERVER_HOSTNAME.equals("*"))
Index: java/com/l2jserver/loginserver/SelectorHelper.java
===================================================================
--- java/com/l2jserver/loginserver/SelectorHelper.java (revision 3751)
+++ java/com/l2jserver/loginserver/SelectorHelper.java (working copy)
@@ -12,11 +12,7 @@
*/
package com.l2jserver.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;
@@ -29,23 +25,22 @@
import org.mmocore.network.ReceivablePacket;
import com.l2jserver.loginserver.serverpackets.Init;
+import com.l2jserver.util.IPv4Filter;
/**
*
* @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();
}
/**
@@ -74,110 +69,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);
- }
-
- /**
- *
- * @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)
- {
-
-
- }
- }
+ return _ipv4filter.accept(sc) && !LoginController.getInstance().isBannedAddress(sc.socket().getInetAddress());
}
}
Index: java/com/l2jserver/util/IPv4Filter.java
===================================================================
--- java/com/l2jserver/util/IPv4Filter.java (revision 0)
+++ java/com/l2jserver/util/IPv4Filter.java (revision 0)
@@ -0,0 +1,151 @@
+/*
+ * 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 com.l2jserver.util;
+
+import java.net.InetAddress;
+import java.nio.channels.SocketChannel;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map.Entry;
+
+import org.mmocore.network.IAcceptFilter;
+
+/**
+ * Formatted Forsaiken's IPv4 filter [DrHouse]
+ *
+ * @author Forsaiken
+ *
+ */
+public class IPv4Filter implements IAcceptFilter, Runnable
+{
+ private HashMap<Integer, Flood> _ipFloodMap;
+ private 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;
+ }
+ }
+
+ @Override
+ 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());
+ }
+ }
+
+ @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(SLEEP_TIME);
+ }
+ catch (InterruptedException e)
+ {
+
+ }
+ }
+ }
+
+}
\ No newline at end of file
I put it correct no errors on java but i try to log in i log in and when i reach the name of server i press ok to log in and nothing happened.Did anyone know how to fix it or how i can modified it to enter? Is for security.
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.
DISCORD :
https://discord.com/users/325653525793210378
utchiha_market
telegram :
https://t.me/utchiha_market
SELLIX STORE :
https://utchihamkt.mysellix.io/
Join our server for more products :
https://discord.gg/uthciha-services
https://campsite.bio/utchihaamkt
Question
VaGGPD
I put it correct no errors on java but i try to log in i log in and when i reach the name of server i press ok to log in and nothing happened.Did anyone know how to fix it or how i can modified it to enter? Is for security.
//Off sory for bad english.
Thanks.
4 answers to this question
Recommended Posts
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.