I did not make the SYI protecter it was made by KEVIN, this tutorial is for Czar only, because that is the only server that has a strange server.java.
Description: Stopping an Syi crasher from attacking your server.
Difficulty: 2
Assumed Knowledge: Copy & Paste
Tested Server: Project Czar
Files/Classes Modified: Server.java, client.java
Procedure
Step 1: Make a new file called BanManager.java and put this inside:
Code:
import java.util.ArrayList;
public class BanManager
{
public final static void Initialize() // Ban Manager handler by Kevin
{
AddName("SYIpkpker");
AddName("SilabSoft");
AddName("runescape");
AddName("thorak");
AddName("CRASH");
AddAddress("e83-245-158-89.elisa-laajakaista.fi");
}
public final static void AddName(String Name)
{
Names.add(Name.toLowerCase());
}
public final static boolean BannedName(String _Name)
{
_Name = _Name.toLowerCase();
for(String Name : Names)
if(_Name.contains(Name))
return true;
for(Character c : _Name.toCharArray()) // <3 Silabsoft
if(!Character.isLetterOrDigit(c))
if(!Character.isSpaceChar(c))
return true;
return false;
}
public final static void AddAddress(String Address)
{
Addresses.add(Address.toLowerCase());
}
public final static boolean BannedAddress(String _Address)
{
_Address = _Address.toLowerCase();
for(String Address : Addresses)
if(Address.equals(_Address))
return true;
return false;
}
public static ArrayList<String> Names = new ArrayList<String>();
public static ArrayList<String> Addresses = new ArrayList<String>();
}
Step 2: Open up client.java and search:
Code:
if(playerName == null || playerName.length() == 0)
disconnected = true;
Under that add:
Code:
if(BanManager.BannedName(playerName)) //by kevin
{
BanManager.AddAddress(connectedFrom);
disconnected = true;
return;
}
Step 3: Now open up server.java ( backup your server.java ):
Add this to server.java:
Code:
public String connectingHost;
then Find,
Code:
public void run() {
Replace ALL the code below that with:
Code:
public void run() {
// setup the listener
try {
shutdownClientHandler = false;
clientListener = new java.net.ServerSocket(serverlistenerPort, 1, null);
misc.println("- YOUR SERVER NAME -");
misc.println("NOW ONLINE!");
while(true) {
java.net.Socket s = acceptSocketSafe(clientListener);
s.setTcpNoDelay(true);
connectingHost = s.getInetAddress().getHostName();
if (server.playerHandler.checkBannedIps() == true) {
misc.println(connectingHost+" is ip banned");
s.close();
} else {
if(/*connectingHost.startsWith("localhost") || connectingHost.equals("127.0.0.1")*/true) {
if(clientListener != null)
{
if(!BanManager.BannedAddress(connectingHost))
{
misc.println("ClientHandler: Accepted from "+connectingHost+":"+s.getPort()); // by kevin
playerHandler.newPlayerClient(s, connectingHost);
}
else
{
misc.println("ClientHandler: Rejected from "+connectingHost+":"+s.getPort()); // by kevin
s.close();
}
}
}
}
}
} catch(java.io.IOException ioe) {
if(!shutdownClientHandler) {
misc.println("Error: Unable to startup listener on "+serverlistenerPort+" - port already in use?");
} else {
misc.println("ClientHandler was shut down.");
}
}
}
public void killServer() {
try {
shutdownClientHandler = true;
if(clientListener != null) clientListener.close();
clientListener = null;
} catch(java.lang.Exception __ex) {
__ex.printStackTrace();
}
}
public static int EnergyRegian = 0;
public static int MaxConnections = 100000;
public static String[] Connections = new String[MaxConnections];
public static int[] ConnectionCount = new int[MaxConnections];
public static boolean ShutDown = false;
public static int ShutDownCounter = 0;
}
Step 4: Open up playerhandler.java, and search:
Code:
// anything can be done here like unlinking this player structure from any of the other existing structures
plr.destruct();
}
Directly under that add:
Code:
public boolean checkBannedIps() {
String bannedIp = null;
try {
BufferedReader br = new BufferedReader(new FileReader("./data/bannedips.txt"));
while((bannedIp = br.readLine()) != null) {
if(server.clientHandler.connectingHost.startsWith(bannedIp)) {
return true;
}
}
} catch(IOException e) {
System.err.println("Error reading the banned IPs list");
}
return false;
}
Credits: Musicmad (for making it work with czar) Kevin for Anti Syi
THIS ALSO HAS WORKING IPBAN IN IT. MAKE SURE YOU HAVE A FILE CALLED: bannedips.txt in your data folder.
Thanks
Post all errors below.