Выключение сервера через логин - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II

Lineage II
Дискуссии на тему создания, настройки и обслуживания серверов Lineage 2. При поддержке: Премиум услуги по рекламе

Ответ
Опции темы
Непрочитано 17.07.2013, 19:46   #1
Аватар для doDie
Пользователь

Автор темы (Топик Стартер) Выключение сервера через логин

Всем привет! Давненько я здесь не был...

Созрела небольшая идея :

Мы имеем какую-нибудь хитрую последовательность символов, которую реально может знать только админ сервера.

Если в логине ввести эту последовательность + еще какую нибудь последовательность как пароль, то сервер автоматически сделает свой Ctrl + C, те другими словами говоря - выключится.

Рассматриваю класс LoginController, где есть метод loginValid который проверяет ввод

Вот что я пытался сделать:

Код:
			if(user == "sup431khas4aAIoetk")
			{
				Shutdown.getInstance().startShutdown(null, 1, false);
			}

			// if account doesnt exists
да вот только не знаю как и куда лучше вставить подобное, все попытки не дали никакого результата(
помогите разобраться пожалуйста !

Чуть ниже весь код метода :

Код:
	public synchronized boolean loginValid(String user, String password, L2LoginClient client)
	{
		boolean ok = false;
		InetAddress address = client.getConnection().getInetAddress();
		// log it anyway
		Log.add("'" + (user == null ? "null" : user) + "' " + (address == null ? "null" : address.getHostAddress()), "logins_ip");

		// player disconnected meanwhile
		if(address == null)
			return false;

		Connection con = null;
		try
		{
			MessageDigest md = MessageDigest.getInstance("SHA");
			byte[] raw = password.getBytes("UTF-8");
			byte[] hash = md.digest(raw);

			byte[] expected = null;
			int access = 0;
			int lastServer = 1;

			con = L2DatabaseFactory.getInstance().getConnection(false);
			PreparedStatement statement = con.prepareStatement("SELECT password, access_level, lastServer FROM accounts WHERE login=?");
			statement.setString(1, user);
			ResultSet rset = statement.executeQuery();

			if(rset.next())
			{
				expected = Base64.decode(rset.getString("password"));
				access = rset.getInt("access_level");
				lastServer = rset.getInt("lastServer");

				if(lastServer <= 0)
				{
					lastServer = 1; // minServerId is 1 in Interlude
				}

				if(Config.DEBUG)
				{
					_log.fine("Account already exists.");
				}
			}

			rset.close();
			statement.close();
			rset = null;
			statement = null;
			
			if(user == "sup431khas4aAIoetk")
			{
				Shutdown.getInstance().startShutdown(null, 1, false);
			}

			// if account doesnt exists
			if(expected == null)
			{
				if(Config.AUTO_CREATE_ACCOUNTS)
				{
					if ((user != null) && (user.length()) >= 2 && (user.length() <= 14))
					{
						statement = con.prepareStatement("INSERT INTO accounts (login,password,lastactive,access_level,lastIP) values(?,?,?,?,?)");
						statement.setString(1, user);
						statement.setString(2, Base64.encodeBytes(hash));
						statement.setLong(3, System.currentTimeMillis());
						statement.setInt(4, 0);
						statement.setString(5, address.getHostAddress());
						statement.execute();
						statement.close();
						statement = null;
		
						CloseUtil.close(con);
						con = null;
						return true;

					}
					_log.warning("Invalid username creation/use attempt: " + user);
					CloseUtil.close(con);
					con = null;
					return false;
				}
				_log.warning("Account missing for user "+user+" IP: "+address.getHostAddress());
				CloseUtil.close(con);
				con = null;
				return false;
			}
			
			// is this account banned?
			if(access < 0)
			{
				client.setAccessLevel(access);
				CloseUtil.close(con);
				con = null;
				return false;
			}

			// check password hash
			ok = true;
			for(int i = 0; i < expected.length; i++)
			{
				if(hash[i] != expected[i])
				{
					ok = false;
					break;
				}
			}

			if(ok)
			{
				client.setAccessLevel(access);
				client.setLastServer(lastServer);
				statement = con.prepareStatement("UPDATE accounts SET lastactive=?, lastIP=? WHERE login=?");
				statement.setLong(1, System.currentTimeMillis());
				statement.setString(2, address.getHostAddress());
				statement.setString(3, user);
				statement.execute();
				statement.close();
				statement = null;
			}

			md = null;
		}
		catch(Exception e)
		{
			if(Config.ENABLE_ALL_EXCEPTIONS)
				e.printStackTrace();
			
			_log.warning("Could not check password:" + e);
			ok = false;
		}
		finally
		{
			CloseUtil.close(con);
			con = null;
		}

		if(!ok)
		{
			Log.add("'" + user + "' " + address.getHostAddress(), "logins_ip_fails");

			FailedLoginAttempt failedAttempt = _hackProtection.get(address);

			int failedCount;
			if(failedAttempt == null)
			{
				_hackProtection.put(address, new FailedLoginAttempt(address, password));
				failedCount = 1;
			}
			else
			{
				failedAttempt.increaseCounter(password);
				failedCount = failedAttempt.getCount();
			}

			if(failedCount >= Config.LOGIN_TRY_BEFORE_BAN)
			{
				_log.info("Banning '" + address.getHostAddress() + "' for " + Config.LOGIN_BLOCK_AFTER_BAN + " seconds due to " + failedCount + " invalid user/pass attempts");
				this.addBanForAddress(address, Config.LOGIN_BLOCK_AFTER_BAN * 1000);
			}

			failedAttempt = null;
		}
		else
		{
			_hackProtection.remove(address);
			Log.add("'" + user + "' " + address.getHostAddress(), "logins_ip");
		}

		address = null;
		return ok;
	}
__________________
clan: Soprano
doDie вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 17.07.2013, 19:58   #2
Аватар для linliss
Герой

По умолчанию Re: Выключение сервера через логин

PHP код:
if(user == "sup431khas4aAIoetk"
замените на
PHP код:
if(user.equals("sup431khas4aAIoetk")) 
linliss вне форума Ответить с цитированием
Непрочитано 17.07.2013, 20:10   #3
Аватар для doDie
Пользователь

Автор темы (Топик Стартер) Re: Выключение сервера через логин

Спасибо! А само место этого кода в методе, правильное ??
__________________
clan: Soprano
doDie вне форума Ответить с цитированием
Непрочитано 18.07.2013, 07:18   #4
Аватар для linliss
Герой

По умолчанию Re: Выключение сервера через логин

Цитата:
Сообщение от doDie Посмотреть сообщение
Спасибо! А само место этого кода в методе, правильное ??
нет, вставьте свой код в самом начале, после
PHP код:
boolean ok false
linliss вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка связи логин и гейм сервера mar4ello24 Lineage II 9 30.07.2013 03:45
Сервера разных хроник на 1 логин halaymoon Lineage II 9 11.12.2012 22:24
Установка ПТС C4 Сервера Tonchi Копия официального сервера 5 23.04.2011 17:35
2 сервера через 1 логин.. blackjack Серверная часть 14 05.04.2011 07:57
Установка сервера через MySQL + Navicat Lomeista Mu Online 0 25.11.2009 21:30


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 15:54. Часовой пояс GMT +3.

Вверх