Перейти к содержанию
Авторизация  
aleksichenk

Ограничение на количество окон !

Рекомендуемые сообщения

Кто подскажет как сделать ограничение  для входа на сервер  максимум 2 окна ?

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это все вилами по воде. Ограничения это лишь заглушка от лаймеров, в виде смотрим сколько коннектов с 1 ип или если в клиент вшит флажек и счетчик этих окон, который будет сбрасывать при запуски нового окна, если мол больше нельзя.

Ну спасет только от незнающих машинного кода, те, кто проводят время изучая реверс, то все ваши защиты и ограничения - это так, на завтрак с чашкой кофе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, Saltfire сказал:

Это все вилами по воде. Ограничения это лишь заглушка от лаймеров, в виде смотрим сколько коннектов с 1 ип или если в клиент вшит флажек и счетчик этих окон, который будет сбрасывать при запуски нового окна, если мол больше нельзя.

Ну спасет только от незнающих машинного кода, те, кто проводят время изучая реверс, то все ваши защиты и ограничения - это так, на завтрак с чашкой кофе.

95 % этого не будут знать  с остальными 5 % можно решить  )  Так а как это сделать чтобы  больше 2 окон не смогли войти на сервер ?

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, aleksichenk сказал:

95 % этого не будут знать  с остальными 5 % можно решить  )  Так а как это сделать чтобы  больше 2 окон не смогли войти на сервер ?

Любая защита или скрипт на чтение ip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
14 часов назад, aleksichenk сказал:

95 % этого не будут знать  с остальными 5 % можно решить  )  Так а как это сделать чтобы  больше 2 окон не смогли войти на сервер ?

Вы ошиблись, скорее 95% будут знать, а 5% это тем, кому до звезды на вас.  Но все-же, чтобы это сделать, при входе на сервер, нужно создать хранилище ип адресов, которые уже зашли на сервер, а собственно при отключении игроков, опустошать их ип-адрес из списка. Ну и если уже зашел и такой ип уже есть в списке, просто разрываем соединение.

2 вариант, более надежен от школы, если зашить в клиент условия на запуск игры. Почему надежнее? Потому, что 95% не смогут изменить dll как потребуется для них. А 5% не станут терять на это время, если конечно будет над чем терять, а не 3 секунды и все исправлено. Но 3 секунды и VPN сменить и 2 оконо запустить. На край виртуалку поднять.

Ну да, усложнишь и 5% жизнь, если сделаешь и 1 и 2 варианты.:) Правда из 5% - 70% точно сразу сделают все.;)

На сервере примерно выглядит так:

Заходим в WorldManager.java - добавляем:

    private static volatile List<String> ips = new ArrayList<>();	

    public static void addIp(final String ip) {
        if (!ip.isEmpty() && !ips.contains(ip)) {
            ips.add(ip);
        }
    }

    public static boolean isIp(final String ip) {
        return !ip.isEmpty() && ips.contains(ip);
    }

    public static void removeIp(final String ip) {
        ips.remove(ip);
    }

    public static List<String> getIps() {
        return ips;
    }

Далее переходим в AbstractPacket.java - добавляем:

    public String ip() {
        return this.getInetAddress().getHostAddress();
    }

    public InetAddress getInetAddress() {
        return ((MMOConnection) ((MMOClient) this._client).getConnection()).getInetAddress();
    }

После переходим в EnterWorld.java -> runImpl(), run(), etc()...

   final boolean isIp = WorldManager.isIp(ip());
   if (!isIp) {
       WorldManager.addIp(ip());
   }

В L2Player.java или что у вас там-> closeNetConnection()

Тут придется написать так:

    final String ip = client.getConnection().getInetAddress().getHostAddress();
    if (WorldManager.isIp(ip)) {
          WorldManager.removeIp(ip);
    }

В L2GameClient.java -> CleanupTask -> run()

   WorldManager.removeIp(getConnection().getInetAddress().getHostAddress());

В Logout.java -> runImpl(), run(), etc()...

   WorldManager.removeIp(ip());

В RequestRestart.java -> runImpl(), run(), etc()...

   WorldManager.removeIp(ip());

В GameServerThread.java -> kickPlayer()

WorldManager.removeIp(_connectionIPAddress);

Думаю, намек понятен, при входе где нужно добавляем, при выходе, кике, вылетах и т.д., что вызывает отключение клиента от сервера, там просто из списка удаляем, чтобы не получилось так, что клиент подключился, его выбило или отключился, а потом подключается, а его не пустит, пока сервер не перезагрузим или во время его работы не вычистим из памяти его ип, который у нас записывается в список.

Изменено пользователем Saltfire
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Saltfire сказал:

Вы ошиблись, скорее 95% будут знать, а 5% это тем, кому до звезды на вас.  Но все-же, чтобы это сделать, при входе на сервер, нужно создать хранилище ип адресов, которые уже зашли на сервер, а собственно при отключении игроков, опустошать их ип-адрес из списка. Ну и если уже зашел и такой ип уже есть в списке, просто разрываем соединение.

2 вариант, более надежен от школы, если зашить в клиент условия на запуск игры. Почему надежнее? Потому, что 95% не смогут изменить dll как потребуется для них. А 5% не станут терять на это время, если конечно будет над чем терять, а не 3 секунды и все исправлено. Но 3 секунды и VPN сменить и 2 оконо запустить. На край виртуалку поднять.

Ну да, усложнишь и 5% жизнь, если сделаешь и 1 и 2 варианты.:) Правда из 5% - 70% точно сразу сделают все.;)

На сервере примерно выглядит так:

Заходим в WorldManager.java - добавляем:


    private static volatile List<String> ips = new ArrayList<>();	

    public static void addIp(final String ip) {
        if (!ip.isEmpty() && !ips.contains(ip)) {
            ips.add(ip);
        }
    }

    public static boolean isIp(final String ip) {
        return !ip.isEmpty() && ips.contains(ip);
    }

    public static void removeIp(final String ip) {
        ips.remove(ip);
    }

    public static List<String> getIps() {
        return ips;
    }

Далее переходим в AbstractPacket.java - добавляем:


    public String ip() {
        return this.getInetAddress().getHostAddress();
    }

    public InetAddress getInetAddress() {
        return ((MMOConnection) ((MMOClient) this._client).getConnection()).getInetAddress();
    }

После переходим в EnterWorld.java -> runImpl(), run(), etc()...


   final boolean isIp = WorldManager.isIp(ip());
   if (!isIp) {
       WorldManager.addIp(ip());
   }

В L2Player.java или что у вас там-> closeNetConnection()

Тут придется написать так:


    final String ip = client.getConnection().getInetAddress().getHostAddress();
    if (WorldManager.isIp(ip)) {
          WorldManager.removeIp(ip);
    }

В L2GameClient.java -> CleanupTask -> run()


   WorldManager.removeIp(getConnection().getInetAddress().getHostAddress());

В Logout.java -> runImpl(), run(), etc()...


   WorldManager.removeIp(ip());

В RequestRestart.java -> runImpl(), run(), etc()...


   WorldManager.removeIp(ip());

В GameServerThread.java -> kickPlayer()


WorldManager.removeIp(_connectionIPAddress);

Думаю, намек понятен, при входе где нужно добавляем, при выходе, кике, вылетах и т.д., что вызывает отключение клиента от сервера, там просто из списка удаляем, чтобы не получилось так, что клиент подключился, его выбило или отключился, а потом подключается, а его не пустит, пока сервер не перезагрузим или во время его работы не вычистим из памяти его ип, который у нас записывается в список.

Спасибо !

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...