JavaQuestions Posted September 10, 2010 Posted September 10, 2010 thelw an kapios mporei to fix gia to bug tou l2jattacker.. ekana search kai vrhka mono ena l2jattacker fix alla htan junk thx... :)
0 Sniffer* Posted September 10, 2010 Posted September 10, 2010 Packethandler debug perna kai ise gg t exei share o Serk edw
0 JavaQuestions Posted September 10, 2010 Author Posted September 10, 2010 mporeis na m doseis ligo t link?
0 JavaQuestions Posted September 10, 2010 Author Posted September 10, 2010 mporei kapios na m dosei ena link gia na antimetopisw to l2jattacker??? thx.....!
0 ~Ge0rge~ Posted September 10, 2010 Posted September 10, 2010 Index: java/net/sf/l2j/gameserver/GameServer.java =================================================================== --- java/net/sf/l2j/gameserver/GameServer.java (revision 3898) +++ java/net/sf/l2j/gameserver/GameServer.java (working copy) @@ -59,7 +59,6 @@ import net.sf.l2j.gameserver.datatables.SummonItemsData; import net.sf.l2j.gameserver.datatables.TeleportLocationTable; import net.sf.l2j.gameserver.datatables.ZoneData; - import net.sf.l2j.gameserver.geoeditorcon.GeoEditorListener; import net.sf.l2j.gameserver.handler.AdminCommandHandler; import net.sf.l2j.gameserver.handler.ItemHandler; @@ -134,6 +133,7 @@ import net.sf.l2j.gameserver.handler.itemhandlers.Firework; import net.sf.l2j.gameserver.handler.itemhandlers.FishShots; import net.sf.l2j.gameserver.handler.itemhandlers.Harvester; +import net.sf.l2j.gameserver.handler.itemhandlers.Maps; import net.sf.l2j.gameserver.handler.itemhandlers.MercTicket; import net.sf.l2j.gameserver.handler.itemhandlers.MysteryPotion; import net.sf.l2j.gameserver.handler.itemhandlers.PaganKeys; @@ -151,7 +151,6 @@ import net.sf.l2j.gameserver.handler.itemhandlers.SpecialXMas; import net.sf.l2j.gameserver.handler.itemhandlers.SpiritShot; import net.sf.l2j.gameserver.handler.itemhandlers.SummonItems; -import net.sf.l2j.gameserver.handler.itemhandlers.Maps; import net.sf.l2j.gameserver.handler.skillhandlers.BalanceLife; import net.sf.l2j.gameserver.handler.skillhandlers.BeastFeed; import net.sf.l2j.gameserver.handler.skillhandlers.Blow; @@ -229,6 +228,7 @@ import net.sf.l2j.gameserver.util.DynamicExtension; import net.sf.l2j.gameserver.util.FloodProtector; import net.sf.l2j.status.Status; +import net.sf.l2j.util.IPv4Filter; import com.l2jserver.mmocore.network.SelectorServerConfig; import com.l2jserver.mmocore.network.SelectorThread; @@ -660,6 +660,7 @@ SelectorServerConfig ssc = new SelectorServerConfig(Config.PORT_GAME); L2GamePacketHandler gph = new L2GamePacketHandler(); _selectorThread = new SelectorThread<L2GameClient>(ssc, gph, gph, gph); + _selectorThread.setAcceptFilter(new IPv4Filter()); _selectorThread.openServerSocket(); _selectorThread.start(); _log.config("Maximum Numbers of Connected Players: " + Config.MAXIMUM_ONLINE_USERS); Index: java/net/sf/l2j/loginserver/SelectorHelper.java =================================================================== --- java/net/sf/l2j/loginserver/SelectorHelper.java (revision 3898) +++ java/net/sf/l2j/loginserver/SelectorHelper.java (working copy) @@ -23,6 +23,7 @@ import java.util.concurrent.TimeUnit; import net.sf.l2j.loginserver.serverpackets.Init; +import net.sf.l2j.util.IPv4Filter; import com.l2jserver.mmocore.network.IAcceptFilter; import com.l2jserver.mmocore.network.IClientFactory; @@ -37,10 +38,12 @@ public class SelectorHelper implements IMMOExecutor<L2LoginClient>, IClientFactory<L2LoginClient>, IAcceptFilter { private ThreadPoolExecutor _generalPacketsThreadPool; + private IPv4Filter _ipv4filter; public SelectorHelper() { _generalPacketsThreadPool = new ThreadPoolExecutor(4, 6, 15L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()); + _ipv4filter = new IPv4Filter(); } /** @@ -66,7 +69,7 @@ */ public boolean accept(SocketChannel sc) { - return !LoginController.getInstance().isBannedAddress(sc.socket().getInetAddress()); + return _ipv4filter.accept(sc) && !LoginController.getInstance().isBannedAddress(sc.socket().getInetAddress()); } } Index: java/net/sf/l2j/util/IPv4Filter.java =================================================================== --- java/net/sf/l2j/util/IPv4Filter.java (revision 0) +++ java/net/sf/l2j/util/IPv4Filter.java (revision 0) @@ -0,0 +1,149 @@ +/* + * 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 net.sf.l2j.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] + * + * @author Forsaiken + * + */ +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 arg0) + { + InetAddress addr = arg0.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) + { + + } + } + } +} \ No newline at end of file Credits to l2jforum
0 JavaQuestions Posted September 10, 2010 Author Posted September 10, 2010 ok thx :) someone lock the topic..
0 Sniffer* Posted September 10, 2010 Posted September 10, 2010 omg give him a patch why you post a lame code just give him a patch
0 Justice Posted September 10, 2010 Posted September 10, 2010 ok thx :) someone lock the topic.. Όπως θές.
Question
JavaQuestions
thelw an kapios mporei to fix gia to bug tou l2jattacker..
ekana search kai vrhka mono ena l2jattacker fix alla htan junk
thx... :)
7 answers to this question
Recommended Posts