У меня есть простая процедура обеспечения безопасности, которая использует хеш MD5 для конкатенации IP-адреса и общего секрета от клиента к серверу. (Клиент предоставляет этот хеш серверу, а сервер делает свой хэш на основе IP-адреса клиента и проверяет равенство.)
Клиентский конец может иметь несколько сетевых интерфейсов; в разработке, например, мы имеем общедоступный IP-адрес, localhost и сетевой адрес VPN, не говоря уже о адресах IPv6.
При выполнении запросов от клиента на хост клиент должен конкатенировать IP-адрес запрашивающего интерфейса с общим секретом. Я повесил трубку на запрашивающую часть интерфейса. За исключением того, что это элемент конфигурации, все равно нужно определить через JDK, какой сетевой интерфейс будет использоваться для разрешения и передачи на конкретный хост? (У меня уже есть имя хоста как элемент конфигурации, так что это не проблема).
Это принципиально сетевой вопрос, а не вопрос Java. И нет прямого способа узнать свой собственный публичный IP-адрес, даже если у вас есть только один интерфейс, не говоря уже о нескольких. Вы можете очистить свой адрес от сайта, например, whatismyip.com, но нет гарантии, что маршрут, выбранный вашей ОС для доступа к этому сайту, будет всегда или когда-либо проходить через тот же интерфейс, что и маршрут к серверу, которому нужен хешированный адрес.