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.
Hello, I'd like to change a title color for custom npc.
I created custom NPC, cloned existing. I put unique id for it in npcname-e, npcgrp and database.
I have "0" to serverSideName in db, so that it would use npcname-e, but instead it has "NoNameNPC"and no title color change.
📢 ¡ATENCIÓN JUGADORES DE LINEAGE 2! 📢
¡L2 Crest Converter ha llegado! El programa creado por PulserX para obtener crests de clan (banderas) que realmente funciona, programado y distribuido de manera gratuita a todo el mundo por su humilde servidor.
¿Cansado de que el viejo CrestMaker falle y arruine tus imágenes en Windows 10/11? Hemos creado una solución actualizada.
✅ Optimizado para Windows 10/11
✅ Convierte PNG/JPG perfectamente
✅ Adiós a las imágenes cuadriculadas
L2 Crest Converter es la herramienta que garantiza que tu crest se vea tal como la diseñaste.
Descárgalo y velo en acción aquí:
👉 https://youtu.be/OVsoi5Vaj7M?si=mhE8Aet0w5nwo6ZE
👉 https://youtu.be/OVsoi5Vaj7M?si=mhE8Aet0w5nwo6ZE
👉 https://youtu.be/OVsoi5Vaj7M?si=mhE8Aet0w5nwo6ZE
Question
VaGGPD
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 fileI 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
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 accountSign in
Already have an account? Sign in here.
Sign In Now