2012-06-20 3 views
0

Я работаю над проектом java, где у нас есть сервер и клиентское приложение. Сервер принимает соединение и отправляет запрашиваемые данные клиенту через программирование сокетов.Принимать только соединения из моего приложения

Все работает нормально, но при загрузке и работе на сервере я получаю соединения от неизвестных ip. И это приложение будет использоваться из многих стран, поэтому не будет конкретного ip-адреса для белого списка.

Есть ли способ запретить или отклонить эти IP-адреса, так что только соединения из моего приложения должны быть приняты сервером с использованием сокетов. Можно ли отправлять пользовательские данные при запросе соединений с сервером, чтобы он сообщал серверу о принятии только этих соединений.

ответ

1

После принятия входящего соединения вы можете использовать Socket.getInetAddress() на возвращаемом Socket для извлечения и последующего подтверждения IP.

Если IP не разрешен, используйте Socket.close(), чтобы закрыть нежелательное соединение.

Edit:
Validation, конечно, могут быть основаны на вещах, за пределами только IP. Когда соединение открыто, вы можете использовать его потоки для передачи произвольных данных, чтобы идентифицировать клиента, например, закрыв соединение после сбоя проверки подлинности.

Выполняя это, вы должны, однако, рассмотреть возможность того, что кто-то сможет перехватить ваши сообщения. Другими словами, использование безопасного соединения имеет смысл.

Я не знаю, как вы можете аутентифицировать клиентов на Java до открытия (принятия) соединения.

+0

хорошо Яркко наших клиентов есть свои клиенты во всем мире ..., как я уже упоминал «это приложение будет используется во многих странах, поэтому там не будет похоже на конкретный ip-адрес в белый список ». –

+0

@Spicyjazz Я был упрощен. Я обновил ответ с расширенным объяснением. – Kallja

+0

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

2

Выборочное признание, которое вы описываете, относится к области authentication and authorization. Вы захотите подключить клиентов к:

  1. Определите себя, чтобы вы могли определить, разрешен ли доступ к серверу. Это может быть достигнуто многими способами, например, с использованием белого или IP-адреса MAC-адреса, client side certificates, basic/digest authentication или другой пользовательской схемой аутентификации.
  2. После того, как вы разрешили доступ, вы можете расширить область действия того, что клиент-клиент может сделать в системе, используя правила авторизации.

Я рекомендую ознакомиться с библиотеками, такими как Apache Shiro, которые сделают для вас тяжелый подъем.

+0

well @Perception, я верю, что моя проблема получит решение через сиро ... позвольте мне попробовать свои силы это и дайте знать ... :) спасибо ... –

0

Если ваш сервер и клиент должны быть проверены, вы должны также подумать об использовании сертификатов.

Вот еще информация:

Смежные вопросы