- Joined
- Sep 18, 2011
- Messages
- 112
- Reaction score
- 64
It's not xD.
Program.cs
Sockets.cs
Packets.cs
Operations.cs
ConsoleOp.cs
Database.cs
Program.cs
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;
namespace ManagementSuite
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("################################################################################");
Console.WriteLine(" FlyFF Management Server - Blaze Games 2011");
Console.WriteLine("################################################################################");
Sockets Server = new Sockets();
Thread ThreadCounter = new Thread(SetThreadCount);
ThreadCounter.Start();
Server.Start();
Console.ReadLine();
Environment.Exit(1);
}
public static void SetThreadCount()
{
while (true)
{
int ThreadCount = Process.GetCurrentProcess().Threads.Count;
Console.Title = Convert.ToString(ThreadCount);
}
}
}
}
Sockets.cs
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using ManagementSuite.Packets;
namespace ManagementSuite
{
class Sockets
{
public TcpListener Listener;
public Thread ListenThread;
ConsoleOp CO;
BaseOperations BO;
MySQLOperations Account;
public Sockets()
{
Account = new MySQLOperations("server", "user", "pass", "db");
CO = new ConsoleOp();
BO = new BaseOperations();
}
public void Start() //Start listening for connections
{
Listener = new TcpListener(IPAddress.Any, 3000);
ListenThread = new Thread(new ThreadStart(Listen));
ListenThread.Start();
}
private void Listen()
{
Listener.Start();
while (true)
{
TcpClient Client = Listener.AcceptTcpClient();
string ClientIP = Convert.ToString(IPAddress.Parse(((IPEndPoint)Client.Client.RemoteEndPoint).Address.ToString())); //Get Client's IP
ConsoleOp.ConsoleInform("Connection from " + ClientIP + " attempted...");
if(CO.CheckIP(ClientIP)) //Check if IP is on whitelist
{
Thread ClientThread = new Thread(new ParameterizedThreadStart(Recieve));
ClientThread.Start(Client);
ConsoleOp.ConsoleInform("Connection accepted.");
}
else
{
CO.EmailFailedConnection(ClientIP);
ConsoleOp.ConsoleError("Connection not accepted.");
Send(Client, ServerResponse.ERROR);
Client.Close();
}
}
}
public void Recieve(object client)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream ClientStream = tcpClient.GetStream();
ASCIIEncoding Encoder = new ASCIIEncoding();
int Response;
byte[] ByteResponse = new byte[256];
while (true)
{
Response = 0;
try
{
Response = ClientStream.Read(ByteResponse, 0, ByteResponse.Length);
}
catch
{
break;
}
if (Response == 0)
{
break;
}
string Packet = Encoder.GetString(ByteResponse, 0, Response);
string[] PacketArray = Packet.Split('~');
string PacketHeader = PacketArray[0];
string PacketBody = null;
if (PacketArray.Length == 2)
{
PacketBody = PacketArray[1];
}
Console.WriteLine("Packet Header: {0}\nPacket Body: {1}", PacketHeader, PacketBody);
switch (PacketHeader)
{
case ClientResponse.STARTIS: BO.StartProcess("FlyffISCProgram.exe"); break;
case ClientResponse.STARTLG: BO.StartProcess("FlyffLoginServer.exe"); break;
case ClientResponse.STARTCL: BO.StartProcess("FlyffClusterServer.exe"); break;
case ClientResponse.STARTWD: BO.StartProcess("FlyffWorldServer.exe"); break;
case ClientResponse.STOPIS: BO.StopProcess("FlyffISCProgram.exe"); break;
case ClientResponse.STOPLG: BO.StopProcess("FlyffLoginServer.exe"); break;
case ClientResponse.STOPCL: BO.StopProcess("FlyffClusterServer.exe"); break;
case ClientResponse.STOPWD: BO.StopProcess("FlyffWorldServer.exe"); break;
case ClientResponse.CHECKIS: BO.CheckProcess("FlyffISCProgram.exe"); break;
case ClientResponse.CHECKLG: BO.CheckProcess("FlyffLoginServer.exe"); break;
case ClientResponse.CHECKCL: BO.CheckProcess("FlyffClusterServer.exe"); break;
case ClientResponse.CHECKWD: BO.CheckProcess("FlyffWorldServer.exe"); break;
case ClientResponse.ADMINLOGIN: if (Account.AdminLogin(PacketBody)) { Send(tcpClient, Packets.ServerResponse.SUCCESS + "~" + Packets.ServerResponse.PASSEDADMINLOGIN); } else { Send(tcpClient, Packets.ServerResponse.ERROR + "~" + Packets.ServerResponse.FAILEDADMINLOGIN); } break;
case ClientResponse.LOGIN: Account.Login(PacketBody); break;
case ClientResponse.REGISTER: Account.Register(PacketBody); break;
case ClientResponse.FETCHACCDATA: break;
case ClientResponse.FETCHCHRDATA: break;
case ClientResponse.FETCHGLDDATA: break;
case ClientResponse.FETCHRANKING: break;
case ClientResponse.ONLINEUSERS: break;
case ClientResponse.MAKEADMIN: Account.MakeGM(PacketBody); break;
case ClientResponse.MAKEUSER: Account.MakePlayer(PacketBody); break;
case ClientResponse.BANACC: Account.BanAcc(PacketBody); break;
case ClientResponse.UNBANACC: Account.UnBanAcc(PacketBody); break;
case ClientResponse.ADDPOINTS: break;
case ClientResponse.TAKEPOINTS: break;
case ClientResponse.GETPOINTS: break;
case ClientResponse.CHANGEPASS: Account.ChangePassword(PacketBody); break;
case ClientResponse.CHANGEMAIL: Account.ChangeEmail(PacketBody); break;
default: ConsoleOp.ConsoleError("Unknown packet recieved: " + PacketHeader); break;
}
}
tcpClient.Close();
}
public void Send(object client, string Message)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream ClientStream = null;
try { ClientStream = tcpClient.GetStream(); }
catch { ConsoleOp.ConsoleError("Could not send packets."); }
ASCIIEncoding Encoder = new ASCIIEncoding();
byte[] Packet = Encoder.GetBytes(Message);
if (ClientStream != null) { ClientStream.Write(Packet, 0, Packet.Length); }
}
}
}
Packets.cs
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ManagementSuite
{
namespace Packets
{
public struct ServerResponse
{
public const string SUCCESS = "0x00";
public const string ERROR = "0x01";
public const string FAILEDADMINLOGIN = "1x00";
public const string FAILEDUSERLOGIN = "1x01";
public const string PASSEDADMINLOGIN = "2x00";
public const string PASSEDUSERLOGIN = "2x01";
}
public struct ClientResponse
{
//Start Flyff Programs
public const string STARTIS = "0x02";
public const string STARTLG = "0x03";
public const string STARTCL = "0x04";
public const string STARTWD = "0x05";
//Stop Flyff Programs
public const string STOPIS = "0x06";
public const string STOPLG = "0x07";
public const string STOPCL = "0x08";
public const string STOPWD = "0x09";
//Check Flyff Processes
public const string CHECKIS = "0x10";
public const string CHECKLG = "0x11";
public const string CHECKCL = "0x12";
public const string CHECKWD = "0x13";
//Flyff Website
public const string ADMINLOGIN = "0x14";
public const string LOGIN = "0x15";
public const string REGISTER = "0x16";
public const string FETCHACCDATA = "0x17";
public const string FETCHCHRDATA = "0x18";
public const string FETCHGLDDATA = "0x19";
public const string FETCHRANKING = "0x20";
public const string ONLINEUSERS = "0x21";
public const string MAKEADMIN = "0x22";
public const string MAKEUSER = "0x23";
public const string BANACC = "0x24";
public const string UNBANACC = "0x25";
public const string CHANGEPASS = "0x29";
public const string CHANGEMAIL = "0x30";
/* Donation */
public const string ADDPOINTS = "0x26";
public const string TAKEPOINTS = "0x27";
public const string GETPOINTS = "0x28";
}
}
}
Operations.cs
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace ManagementSuite
{
class MSSQLOperations : MSSQL
{
public MSSQLOperations(string server, string username, string password, string database)
: base(server, username, password, database)
{
}
}
class MySQLOperations : MySQL
{
public MySQLOperations(string server, string username, string password, string database)
: base(server, username, password, database)
{
}
//Get MD% Hash for passwords
public string GetMD5Hash(string input)
{
System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
bs = x.ComputeHash(bs);
System.Text.StringBuilder s = new System.Text.StringBuilder();
foreach (byte b in bs)
{
s.Append(b.ToString("x2").ToLower());
}
string password = s.ToString();
return password;
}
//Take bad words out of string
public string Sanatize(string Input)
{
string[] BadCharacters = { "'", "\"", "%", "*", "#", "(", ")", ";", "--", "/", "NULL", "TRUNCATE", "DROP", "UPDATE", "SELECT", "LOAD FILE", "LOAD INFILE", "group_concat", "extractvalue", "0x27" };
foreach (string Character in BadCharacters)
{
Input = Input.Replace(Character, "");
}
return Input;
}
public bool AdminLogin(string PacketData)
{
string[] Data = PacketData.Split('&');
string User = Data[0];
string password = Data[1];
string Salt = "kikugalanet";
User = Sanatize(User);
Console.WriteLine("Username: {0}\nPassword: {1}", User, password);
string[] Password = ReturnQuery("SELECT flyff_passwordhash FROM flyff_accounts WHERE flyff_accountname='" + User + "'");
string[] Auth = ReturnQuery("SELECT flyff_authoritylevel FROM flyff_accounts WHERE flyff_accountname='" + User + "'");
if (Password[0] == GetMD5Hash(Salt + password) && Auth[0] == "120")
{
return true;
}
else
{
return false;
}
}
public bool Login(string PacketData)
{
string[] Data = PacketData.Split('\t');
string User = Data[0];
string password = Data[1];
string Salt = "kikugalanet";
User = Sanatize(User);
string[] Password = ReturnQuery("SELECT flyff_passwordhash FROM flyff_accounts WHERE flyff_accountname='" + User + "'");
if (Password[0] == GetMD5Hash(Salt + password))
{
return true;
}
else
{
return false;
}
}
public void Register(string PacketData)
{
string[] Data = PacketData.Split('\t');
string Salt = "kikugalanet";
string Account = Data[0];
string Password = Data[1];
string Email = Data[2];
Account = Sanatize(Account);
Password = GetMD5Hash(Salt + Password);
Email = Sanatize(Email);
NonReturnQuery("INSERT INTO flyff_accounts ('flyff_username', 'flyff_passwordhash', 'flyff_email') VALUES ('" + Account + "', '" + Password + "', '" + Email + "')");
ConsoleOp.Email("Welcome!", "Welcome to our server " + Account + ". Your password is " + Password, Email);
}
public void MakeGM(string PacketData)
{
string accName = Sanatize(PacketData);
NonReturnQuery("UPDATE flyff_accounts SET flyff_authoritylevel = '80' WHERE flyff_accountname = '" + accName + "'");
}
public void ChangePassword(string PacketData)
{
string[] Data = PacketData.Split('\t');
string Salt = "kikugalanet";
string Account = Data[0];
string Password = Data[1];
Account = Sanatize(Account);
string PasswordHash = GetMD5Hash(Salt + Password);
NonReturnQuery("UPDATE flyff_accounts SET flyff_passwordhash = '" + PasswordHash + "' WHERE flyff_accountname = '" + Account + "'");
string[] Email = ReturnQuery("SELECT flyff_email FROM flyff_accounts WHERE flyff_accountname='" + Account + "'");
ConsoleOp.Email("Password update", "Your new password is " + Password + " . Have a great day!", Email[0]);
}
public void ChangeEmail(string PacketData)
{
string[] Data = PacketData.Split('\t');
string Account = Data[0];
string Email = Data[1];
Account = Sanatize(Account);
Email = Sanatize(Email);
NonReturnQuery("UPDATE flyff_accounts SET flyff_email = '" + Email + "' WHERE flyff_accountname = '" + Account + "'");
ConsoleOp.Email("E-Mail update", "Thanks for letting us know about your new e-mail! Have a great day!", Email);
}
public void MakePlayer(string PacketData)
{
string accName = Sanatize(PacketData);
NonReturnQuery("UPDATE flyff_accounts SET flyff_authoritylevel = '70' WHERE flyff_accountname = '" + accName + "'");
}
public void BanAcc(string PacketData)
{
string accName = Sanatize(PacketData);
NonReturnQuery("UPDATE flyff_accounts SET flyff_authoritylevel = '0' WHERE flyff_accountname = '" + accName + "'");
string[] Email = ReturnQuery("SELECT flyff_email FROM flyff_accounts WHERE flyff_accountname='" + accName + "'");
//Email
ConsoleOp.Email("Account status", "Your account has been temporarily banned while our team carries about an investigation. Please respond to this e-mail with character name and cluster so we may resolve this faster!", Email[0]);
}
public void UnBanAcc(string PacketData)
{
string accName = Sanatize(PacketData);
NonReturnQuery("UPDATE flyff_accounts SET flyff_authoritylevel = '70' WHERE flyff_accountname = '" + accName + "'");
string[] Email = ReturnQuery("SELECT flyff_email FROM flyff_accounts WHERE flyff_accountname='" + accName + "'");
//Email
ConsoleOp.Email("Account status", "Your account has been unbanned. Enjoy the game! Please don't respond to this e-mail unless you have further issues.", Email[0]);
}
}
}
ConsoleOp.cs
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Net;
using System.Net.Mail;
using System.Net.Security;
using System.IO;
using System.Net.Sockets;
namespace ManagementSuite
{
class ConsoleOp
{
public static void ConsoleError(string Error)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("[Error] ");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine(Error);
}
public static void ConsoleInform(string Inform)
{
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write("[Inform] ");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine(Inform);
}
public static void ConsoleCommand(string Command)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write("[Error] ");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine(Command);
}
public bool CheckIP(string IP)
{
if (IP == "72.198.45.175" || IP == "24.117.97.52")
return true;
else
return false;
}
public void LogConnection(string IP)
{
//write ip to log file
}
public void EmailFailedConnection(string IP)
{
DateTime Date = DateTime.Now;
Email("Unauthorized access attempt", "The IP " + IP + "attempted to access backend server at " + Date, "ashtonj1@***********.com");
Email("Unauthorized access attempt", "The IP " + IP + "attempted to access backend server at " + Date, "gage@***********.com");
}
public static void Email(string Subject, string Body, string Email)
{
SmtpClient mailClient = new SmtpClient("smtp.live.com", 587);
mailClient.UseDefaultCredentials = false;
mailClient.Credentials = new NetworkCredential("support@***********.com", "password");
mailClient.EnableSsl = true;
MailMessage message = new MailMessage("support@***********.com", Email);
message.Subject = Subject;
message.Body = Body;
message.BodyEncoding = System.Text.Encoding.UTF8;
message.SubjectEncoding = System.Text.Encoding.UTF8;
mailClient.Send(message);
}
}
class BaseOperations
{
private Process Handle;
public BaseOperations()
{
Handle = new Process();
}
public void StartProcess(string prog)
{
Handle.StartInfo.FileName = prog + ".exe";
try
{
Handle.Start();
}
catch
{
ConsoleOp.ConsoleError("Could not find program.");
}
}
public void StopProcess(string prog)
{
Process[] list = Process.GetProcesses();
foreach (Process p in list)
{
if (string.Compare(p.ProcessName, prog, true) == 0)
{
p.Kill();
}
}
}
public bool CheckProcess(string prog)
{
bool isRunning = false;
Process[] list = Process.GetProcesses();
foreach (Process p in list)
{
if (string.Compare(p.ProcessName, prog, true) == 0)
isRunning = true;
}
return isRunning;
}
}
}
Database.cs
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using MySql.Data.MySqlClient;
namespace ManagementSuite
{
class MSSQL
{
private string UserName;
private string Password;
private string Database;
private string Server;
public MSSQL(string server, string username, string password, string database)
{
Server = server;
UserName = username;
Password = password;
Database = database;
}
private SqlConnection Connection()
{
SqlConnection Con = new SqlConnection("Server=" + Server + ";" + "User Id=" + UserName + ";" + "password=" + Password + ";" + "database=" + Database + ";");
try
{
Con.Open();
}
catch
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("[Error] ");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Could not connect to MSSQL.");
}
return Con;
}
protected SqlCommand NonReturnQuery(string Query)
{
SqlCommand Command = new SqlCommand(Query, Connection());
try
{
Command.ExecuteScalar();
}
catch
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("[Error] ");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Query failed to execute.");
}
return Command;
}
//Clean up
~MSSQL()
{
Connection().Close();
}
}
class MySQL
{
private string UserName;
private string Password;
private string Database;
private string Server;
public MySQL(string server, string username, string password, string database)
{
Server = server;
UserName = username;
Password = password;
Database = database;
}
//Connection
private MySqlConnection Connection()
{
MySqlConnection Con = new MySqlConnection("Server=" + Server + ";" + "User Id=" + UserName + ";" + "password=" + Password + ";" + "database=" + Database + ";");
try
{
Con.Open();
}
catch
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("[Error] ");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Could not connect to MySQL.");
}
return Con;
}
//Query
protected MySqlCommand NonReturnQuery(string Query)
{
MySqlCommand Command = new MySqlCommand(Query, Connection());
try
{
Command.ExecuteScalar();
}
catch
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("[Error] ");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Query failed to execute.");
}
return Command;
}
protected string[] ReturnQuery(string Query)
{
string[] Data = null;
MySqlDataReader Reader;
MySqlCommand Command = new MySqlCommand(Query, Connection());
try
{
Reader = Command.ExecuteReader();
Data = new string[Reader.FieldCount];
while (Reader.Read())
{
for (int x = 0; x < Reader.FieldCount; x++)
{
Data[x] = Convert.ToString(Reader[x]);
}
}
}
catch
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("[Error] ");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Query failed to execute.");
}
return Data;
}
//Clean up
~MySQL()
{
Connection().Close();
}
}
}

