Packet rate limit

This commit is contained in:
Anuken 2022-10-27 10:30:28 -04:00
parent be437d63d5
commit c8ebe0cd87
5 changed files with 17 additions and 2 deletions

View file

@ -35,7 +35,8 @@ public class Team implements Comparable<Team>{
//TODO temporarily no palettes for these teams.
green = new Team(4, "green", Color.valueOf("54d67d")),//Color.valueOf("96f58c"), Color.valueOf("54d67d"), Color.valueOf("28785c")),
blue = new Team(5, "blue", Color.valueOf("6c87fd")); //Color.valueOf("85caf9"), Color.valueOf("6c87fd"), Color.valueOf("3b3392")
blue = new Team(5, "blue", Color.valueOf("6c87fd")), //Color.valueOf("85caf9"), Color.valueOf("6c87fd"), Color.valueOf("3b3392")
neoplastic = new Team(6, "neoplastic", Color.valueOf("e05438")); //yes, it looks very similar to crux, you're not supposed to use this team for block regions anyway
static{
Mathf.rand.setSeed(8);

View file

@ -556,6 +556,11 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
public static void unitClear(Player player){
if(player == null) return;
//make sure player is allowed to control the building
if(net.server() && !netServer.admins.allowAction(player, ActionType.respawn, action -> {})){
throw new ValidateException(player, "Player cannot respawn.");
}
if(!player.dead() && !player.unit().spawnedByCore){
var docked = player.unit().dockedType;

View file

@ -676,7 +676,7 @@ public class Administration{
}
public enum ActionType{
breakBlock, placeBlock, rotate, configure, withdrawItem, depositItem, control, buildSelect, command, removePlanned, commandUnits, commandBuilding
breakBlock, placeBlock, rotate, configure, withdrawItem, depositItem, control, buildSelect, command, removePlanned, commandUnits, commandBuilding, respawn
}
}

View file

@ -137,6 +137,13 @@ public class ArcNetProvider implements NetProvider{
ArcConnection k = getByArcID(connection.getID());
if(!(object instanceof Packet pack) || k == null) return;
if(!k.packetRate.allow(3000, 270)){
Log.warn("Blacklisting IP '@' as potential DOS attack - packet spam.", k.address);
connection.close(DcReason.closed);
netServer.admins.blacklistDos(k.address);
return;
}
Core.app.post(() -> {
try{
net.handleServerReceived(k, pack);

View file

@ -30,6 +30,8 @@ public abstract class NetConnection{
public Seq<BuildPlan> rejectedRequests = new Seq<>();
/** Handles chat spam rate limits. */
public Ratekeeper chatRate = new Ratekeeper();
/** Handles packet spam rate limits. */
public Ratekeeper packetRate = new Ratekeeper();
public boolean hasConnected, hasBegunConnecting, hasDisconnected;
public float viewWidth, viewHeight, viewX, viewY;