From 163d8b5553ebbec1275d0cc48f896eb40c1e8de6 Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 23 Apr 2013 11:22:07 +1000 Subject: [PATCH] Proxy IP Filter diff --git a/src/main/java/net/minecraft/server/ThreadLoginVerifier.java b/src/main/java/net/minecraft/server/ThreadLoginVerifier.java index 0686ba0..fcd4136 100644 --- a/src/main/java/net/minecraft/server/ThreadLoginVerifier.java +++ b/src/main/java/net/minecraft/server/ThreadLoginVerifier.java @@ -28,6 +28,7 @@ class ThreadLoginVerifier extends Thread { public void run() { try { + if (org.bukkit.craftbukkit.Spigot.filterIp(pendingConnection)) return; // Spigot String s = (new BigInteger(MinecraftEncryption.a(PendingConnection.a(this.pendingConnection), PendingConnection.b(this.pendingConnection).F().getPublic(), PendingConnection.c(this.pendingConnection)))).toString(16); URL url = new URL("http://session.minecraft.net/game/checkserver.jsp?user=" + URLEncoder.encode(PendingConnection.d(this.pendingConnection), "UTF-8") + "&serverId=" + URLEncoder.encode(s, "UTF-8")); BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(url.openStream())); diff --git a/src/main/java/org/bukkit/craftbukkit/Spigot.java b/src/main/java/org/bukkit/craftbukkit/Spigot.java index 2cd806e..fd90979 100644 --- a/src/main/java/org/bukkit/craftbukkit/Spigot.java +++ b/src/main/java/org/bukkit/craftbukkit/Spigot.java @@ -1,19 +1,49 @@ package org.bukkit.craftbukkit; +import java.net.InetAddress; +import net.minecraft.server.PendingConnection; import org.bukkit.command.SimpleCommandMap; import org.bukkit.configuration.file.YamlConfiguration; public class Spigot { + private static boolean filterIps; + public static void initialize(CraftServer server, SimpleCommandMap commandMap, YamlConfiguration configuration) { server.whitelistMessage = configuration.getString("settings.whitelist-message", server.whitelistMessage); server.stopMessage = configuration.getString("settings.stop-message", server.stopMessage); server.logCommands = configuration.getBoolean("settings.log-commands", true); server.commandComplete = configuration.getBoolean("settings.command-complete", true); server.spamGuardExclusions = configuration.getStringList("settings.spam-exclusions"); + filterIps = configuration.getBoolean("settings.filter-unsafe-ips", false); if (server.chunkGCPeriod == 0) { server.getLogger().severe("[Spigot] You should not disable chunk-gc, unexpected behaviour may occur!"); } } + + public static boolean filterIp(PendingConnection con) { + if (filterIps) { + try { + InetAddress address = con.getSocket().getInetAddress(); + String ip = address.getHostAddress(); + + if (!address.isLoopbackAddress()) { + String[] split = ip.split("\\."); + StringBuilder lookup = new StringBuilder(); + for (int i = split.length - 1; i >= 0; i--) { + lookup.append(split[i]); + lookup.append("."); + } + lookup.append("xbl.spamhaus.org."); + if (InetAddress.getByName(lookup.toString()) != null) { + con.disconnect("Your IP address (" + ip + ") is flagged as unsafe by spamhaus.org/xbl"); + return true; + } + } + } catch (Exception ex) { + } + } + return false; + } } diff --git a/src/main/resources/configurations/bukkit.yml b/src/main/resources/configurations/bukkit.yml index 67c6c5e..b445808 100644 --- a/src/main/resources/configurations/bukkit.yml +++ b/src/main/resources/configurations/bukkit.yml @@ -30,6 +30,7 @@ settings: command-complete: true spam-exclusions: - /skill + filter-unsafe-ips: false world-settings: default: growth-chunks-per-tick: 650 -- 1.8.1.2