Hyperion
Seçkin madenci.
Dakikalar içinde aktif Minecraft sunucunu kur! Lag’sız, düşük pingli TR lokasyon ile kendi dünyanı oluştur, arkadaşlarınla oyna Hemen başla
Selam!
Ben Efe, Hyperion olandan.
Bu gün siteden oyuncu kabul eden sunucular için çakmalobi gerektirmeyecek şekilde nasıl antibot eklentisi yapabilirsiniz onu anlatacağım.
Neden kullanalım?
Sadece siteden kayıt ile oyuncu kabul eden sunuculara yüksek trafik ile bot atıldığı zaman sunucu online sayısı 400-500 kadar yükselip çakma lobileri çöküyor.
Bunun nedeni çok yüksek trafik ile saldırı geldiği zaman botların havuzda kalıp çakma lobiye aktarılmayı beklemesinden dolayı. Bu tür saldırılar da da çakmalobi çok dayanmadan çöküyor. Kısaca olası bir bot saldırısında hem bungeecord sunucunuz hem de spigot sunucunuz aşırı yükleniyor. Fakat spigot sunucunuzun aşırı yüklenmesini basit bir şekilde engelleyebilirsiniz. Oyuncu kontrolünü çakma lobide değil bungeecord üzerinde yaparak.
Bunu atlatmanın en basit yolu kullanıcının kayıt olup olmadığını çakma lobide değil de bungeecord üzerinde kontrol edilmesi.
Her yönden kaynak kazanıyorsunuz yani.
Çakma lobide kontrol olduğu zaman olay akışı:
- Bot bungeecord a girer.
- Bungeecord çakma lobiye yönlendirir.
- Çakma lobi Kontrol için sql sunucusuna sorgu gönderir.
- Kullanıcı kayıtlı değil ise sunucudan atar.
Eğer bunu kullanırsanız;
- Bungeecord memory den kullanıcının kayıtlı olup olmadığını kontrol eder.
- Gelen cevaba göre oyuncu sunucudan atılır.
Kısaca sistemin mantığı:
- Bungeecord sunucusu kayıtlı kullanıcıların listesini HashMap a aktarır, Ve bu listeyi 15 saniye de bir günceller. dolayısıyla siteden kayıt olan birisi 15 saniye sonra sunucuya giriş yapabilir.
- Oyuncu sunucuya girdiği zaman bungeecord plugini kullanıcının HashMap de olup olmadığını kontrol eder. Eğer yok ise sunucudan atar.
Kaynak kodlara geçelim:
- Oyuncu sunucuya girdiği zaman bungeecord plugini kullanıcının HashMap de olup olmadığını kontrol eder. Eğer yok ise sunucudan atar.
Kaynak kodlara geçelim:
Java:
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
public class MySQL {
public Connection conn = null;
public String user;
public String password;
public String ip;
public String db;
public String url;
public boolean isConnect=false;
public MySQL(String ip, String user, String password, String db) {
this.ip = ip;
this.user = user;
this.password = password;
this.db = db;
this.url = "jdbc:mysql://" + ip + ":3306/" + db+"?autoReconnect=true";
try {
conn = (Connection) DriverManager.getConnection(this.url,this.user, this.password);
isConnect=true;
} catch (SQLException e) {
}
}
public String sqlConnectionTest(){
String returnstring="";
try {
ResultSet rs = this.getConn().createStatement().executeQuery("select id from ghostdb limit 1"); // kendi authme tablonunza göre düzenleyiniz
rs.beforeFirst();
rs.next();
returnstring=returnstring+"-SQL Test Success";
} catch (Exception e1) {
returnstring=returnstring+"-SQL Test Error";
try {
try {
conn.close();
returnstring=returnstring+"-Close Success";
} catch (Exception e) {
returnstring=returnstring+"-Close Error";
}
this.conn=null;
this.conn = (Connection) DriverManager.getConnection(this.url,this.user, this.password);
isConnect=true;
returnstring= returnstring+"-New Conection Success";
} catch (Exception e23) {
returnstring= returnstring+"-Error !!!!!!!";
}
}
return returnstring;
}
public Connection getConn() {
return this.conn;
}
public ResultSet getResultSet(String query) {
try {
ResultSet rs = this.getConn().createStatement().executeQuery(query);
return rs;
} catch (SQLException e) {
this.sqlConnectionTest();
return null;
}
}
public boolean ExecuteSql(String query) {
try {
this.getConn().createStatement().executeUpdate(query);
return true;
} catch (SQLException e) {
this.sqlConnectionTest();
return false;
}
}
}
Java:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Plugin;
public class Main extends Plugin {
public String db = "sql db";
public String host = "sql ip";
public String user = "sql kullanıcı adı";
public String password = "sql şifresi";
public static MySQL SqlServer;
public static Main plugin;
public static int lastSqlId = 0;
public static HashMap<String, Integer> userWhiteLists = new HashMap<String, Integer>();
@Override
public void onEnable() {
plugin = this;
SqlServer = new MySQL(host, user, password, db); // sql server
getLogger().info("Naaber Müdüür");
getProxy().getPluginManager().registerListener(this, new AntiBot()); // anti bot sınıfını listener olarak kaydediyoruz
getProxy().getScheduler().schedule(this, new Runnable() {
@Override
public void run() {
getLogger().info(SqlServer.sqlConnectionTest());
}
}, 1, 300, TimeUnit.SECONDS);
getProxy().getScheduler().schedule(this, new Runnable() {
@Override
public void run() {
updateWhiteList.update();
}
}, 1, 15, TimeUnit.SECONDS);
}
}
Java:
public class AntiBot implements Listener {
@SuppressWarnings("deprecation")
@EventHandler(priority=Byte.MIN_VALUE)
public void onServwereeConnect(LoginEvent e) {
if (Main.userWhiteLists.get(e.getConnection().getName().toLowerCase())==null) {
e.setCancelReason("Giriş yapabilmek için\n\nwww.HyperionMC.com Adresinden kayıt olmalısın.\n\nKayıt olduysan 30 saniye bekleyip tekrar giriş yap.");
e.setCancelled(true);
Main.plugin.getLogger().info(e.getConnection().getName()+" §cAtıldı.");
}
}
}
Java:
public class updateWhiteList {
public static void update() {
ResultSet rs = Main.SqlServer.getResultSet("select id,user from ghostdb where id > " + Main.lastSqlId+" ORDER BY id ASC LIMIT 25000"); // kendinize göre düzenleyiniz. Tek seferde 25 bin kayıtlı kişinin ismini çeker.
try {
while (rs.next()) {
int playerID=rs.getInt("id"); // id = uniq user id stünü
String playerName=rs.getString("user").toLowerCase(); // user = kullanıcı adı stünü
if (playerID>Main.lastSqlId) {
Main.lastSqlId=playerID;
}
Main.userWhiteLists.put(playerName, playerID);
Main.plugin.getLogger().info("§eEklendi: "+playerName+ " - "+playerID);
}
} catch (Exception e) {
}
}
}
Ek olarak:
Bu şekilde bir sistem kullandığınız zaman bot sunucuya girdiği zaman bot un skinini çekmek için bungeecord kaynak kullanmaz. öbür türlü sadece skin verilerini çekmeye çalıştığı için bile bungeecord çökebiliyor.
Yapamayan veya bilmeyenler için videolu anlatım!
Kaynak kodları alıntıdır, aldığım konu:
Selçuk namı diğer Janjel'in konusu için TIKLA!
Moderatörün son düzenlenenleri:
Hyperion
Seçkin madenci.
Dakikalar içinde aktif Minecraft sunucunu kur! Lag’sız, düşük pingli TR lokasyon ile kendi dünyanı oluştur, arkadaşlarınla oyna Hemen başla
Videoda belirtmeyi unutmuşum, sadece CTRL + S yetmiyor, CTRL + SHIFT + O yapıp CTRL + S yapmanız gerek, eclipse veya diğer ide'lerde bu kısayol otomatik import ekler, import etmeden ve yaptıklarımı yapmazsanız hata verecektir.
Moonshine
Risk almazsan, risk alanlar için çalışırsın.
- Katılım
- 26 Ekim 2019
- Mesajlar
- 65
- En iyi cevaplar
- 1
- Tepki puanı
- -31
- Puanları
- 1,215
- Konum
- Konya
- Web Sitesi
- batihost.com
Dakikalar içinde aktif Minecraft sunucunu kur! Lag’sız, düşük pingli TR lokasyon ile kendi dünyanı oluştur, arkadaşlarınla oyna Hemen başla
Yararlı konu.
Hyperion
Seçkin madenci.
Dakikalar içinde aktif Minecraft sunucunu kur! Lag’sız, düşük pingli TR lokasyon ile kendi dünyanı oluştur, arkadaşlarınla oyna Hemen başla
Teşekkürler.Yararlı konu.
362Sefa
Test 1 2 3
- Katılım
- 27 Aralık 2019
- Mesajlar
- 356
- En iyi cevaplar
- 11
- Tepki puanı
- 124
- Puanları
- 1,390
- Konum
- Samsun
- Web Sitesi
- sefadursun.net.tr
Dakikalar içinde aktif Minecraft sunucunu kur! Lag’sız, düşük pingli TR lokasyon ile kendi dünyanı oluştur, arkadaşlarınla oyna Hemen başla
Yararlı Konu Başarılar
Hyperion
Seçkin madenci.
Dakikalar içinde aktif Minecraft sunucunu kur! Lag’sız, düşük pingli TR lokasyon ile kendi dünyanı oluştur, arkadaşlarınla oyna Hemen başla
Teşekkürler, size de.Yararlı Konu Başarılar
UmutTR
Seçkin madenci.
- Katılım
- 27 Ekim 2019
- Mesajlar
- 617
- Tepki puanı
- 149
- Puanları
- 1,205
- Konum
- İzmir
- Web Sitesi
- batihost.com
Dakikalar içinde aktif Minecraft sunucunu kur! Lag’sız, düşük pingli TR lokasyon ile kendi dünyanı oluştur, arkadaşlarınla oyna Hemen başla
Güzel konuya değinmişsiniz. Elinize sağlık.
Hyperion
Seçkin madenci.
Dakikalar içinde aktif Minecraft sunucunu kur! Lag’sız, düşük pingli TR lokasyon ile kendi dünyanı oluştur, arkadaşlarınla oyna Hemen başla
Teşekkürler, amaç yardımcı olmak.Güzel konuya değinmişsiniz. Elinize sağlık.
Dakikalar içinde aktif Minecraft sunucunu kur! Lag’sız, düşük pingli TR lokasyon ile kendi dünyanı oluştur, arkadaşlarınla oyna Hemen başla
Eklenti çok başarılı ve güzel düşünülmüş tek kötü yanı kayıt olduktan sonra 30 40sn gibi bekletme süresi var bu da oyuncu kaybına yol açabiliyor "Bu nasıl sunucu lan kayıt oldum hala giremiyorum" gibi bunu düşürme veyahut kapatma gibi bir şansımız var mı ? zira Authme anlık çekiyor da
MİNECRAFTTR.COM
Türkiye'nin en büyük Minecraft forumu,
MinecraftTR, 2013 yılında oyuncu topluluğunu bir araya getirme hedefiyle kurulmuş ve 2018 itibarıyla forum altyapısıyla faaliyetlerine hız kazandırmıştır.
Minecraft sunucuları, modlar, rehberler ve oyun içi etkinlikler başta olmak üzere oyuncuların ihtiyaç duyduğu her alanda bilgi paylaşımını teşvik eden platformumuz,
binlerce aktif üyesiyle Türkiye'nin en geniş Minecraft oyuncu ağına ev sahipliği yapmaktadır.
Yeni arkadaşlıklar edinmek, sunucunuzu tanıtmak veya Minecraft hakkında güncel bilgilere ulaşmak için aramıza katılabilirsiniz.