Определите, какой сетевой интерфейс будет использоваться для данного имени хоста в JDK

1

У меня есть простая процедура обеспечения безопасности, которая использует хеш MD5 для конкатенации IP-адреса и общего секрета от клиента к серверу. (Клиент предоставляет этот хеш серверу, а сервер делает свой хэш на основе IP-адреса клиента и проверяет равенство.)

Клиентский конец может иметь несколько сетевых интерфейсов; в разработке, например, мы имеем общедоступный IP-адрес, localhost и сетевой адрес VPN, не говоря уже о адресах IPv6.

При выполнении запросов от клиента на хост клиент должен конкатенировать IP-адрес запрашивающего интерфейса с общим секретом. Я повесил трубку на запрашивающую часть интерфейса. За исключением того, что это элемент конфигурации, все равно нужно определить через JDK, какой сетевой интерфейс будет использоваться для разрешения и передачи на конкретный хост? (У меня уже есть имя хоста как элемент конфигурации, так что это не проблема).

Теги:

1 ответ

3
Лучший ответ

Это принципиально сетевой вопрос, а не вопрос Java. И нет прямого способа узнать свой собственный публичный IP-адрес, даже если у вас есть только один интерфейс, не говоря уже о нескольких. Вы можете очистить свой адрес от сайта, например, whatismyip.com, но нет гарантии, что маршрут, выбранный вашей ОС для доступа к этому сайту, будет всегда или когда-либо проходить через тот же интерфейс, что и маршрут к серверу, которому нужен хешированный адрес.

  • 0
    Хороший вопрос по общему IP-адресу, я уже знаю о брандмауэрах и прокси-серверах NAT. Однако все еще должно быть возможно определить, какой сетевой интерфейс будет передавать запрос на данное имя хоста. (Для моей конкретной реализации связь осуществляется по внутренней сети, но иногда эта сеть может быть внутри / межрегиональной [AWS] через VPN.)
  • 1
    Ваш ответ дал мне идею; Я собираюсь добавить конечную точку в хост-приложении, которое будет отвечать клиенту с помощью IP-адреса, используемого клиентским запросом (аналогично подходу whatsmyip.com). Хотя это не будет 100% гарантией того, что следующий запрос будет на этом интерфейсе для всех случаев, для моей ситуации - внутренней сети без локальных интерфейсов без балансировки нагрузки - он должен работать правильно 100% времени.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню